cubicweb/server/repository.py
changeset 12012 f7ff5217a02f
parent 11995 7d56ae4aa0ee
child 12016 88ed82a25f8a
--- a/cubicweb/server/repository.py	Mon Mar 06 13:21:50 2017 +0100
+++ b/cubicweb/server/repository.py	Mon Mar 06 13:23:33 2017 +0100
@@ -211,13 +211,13 @@
     entities and relations
     """
 
-    def __init__(self, config, tasks_manager=None, vreg=None):
+    def __init__(self, config, scheduler=None, vreg=None):
         self.config = config
         self.sources_by_eid = {}
         if vreg is None:
             vreg = cwvreg.CWRegistryStore(config)
         self.vreg = vreg
-        self._tasks_manager = tasks_manager
+        self._scheduler = scheduler
 
         self.app_instances_bus = NullEventBus()
         # dictionary of opened sessions
@@ -409,26 +409,29 @@
         if not (self.config.creating or self.config.repairing
                 or self.config.quick_start):
             # register a task to cleanup expired session
-            if self._tasks_manager is not None:
+            if self._scheduler is not None:
                 self.cleanup_session_time = self.config['cleanup-session-time'] or 60 * 60 * 24
                 assert self.cleanup_session_time > 0
                 cleanup_session_interval = min(60 * 60, self.cleanup_session_time / 3)
                 self.looping_task(cleanup_session_interval, self.clean_sessions)
 
-    def start_looping_tasks(self):
-        """Actual "Repository as a server" startup.
+    def run_scheduler(self):
+        """Start repository scheduler after preparing the repository for that.
 
         * trigger server startup hook,
         * register session clean up task,
-        * start all tasks.
+        * start the scheduler *and block*.
 
         XXX Other startup related stuffs are done elsewhere. In Repository
         XXX __init__ or in external codes (various server managers).
         """
         self._prepare_startup()
-        assert self._tasks_manager is not None,\
+        assert self._scheduler is not None, \
             "This Repository is not intended to be used as a server"
-        self._tasks_manager.start()
+        self.info(
+            'starting repository scheduler with tasks: %s',
+            ', '.join(e.action.__name__ for e in self._scheduler.queue))
+        self._scheduler.run()
 
     def looping_task(self, interval, func, *args):
         """register a function to be called every `interval` seconds.
@@ -436,9 +439,12 @@
         looping tasks can only be registered during repository initialization,
         once done this method will fail.
         """
-        assert self._tasks_manager is not None,\
+        assert self._scheduler is not None, \
             "This Repository is not intended to be used as a server"
-        self._tasks_manager.add_looping_task(interval, func, *args)
+        event = utils.schedule_periodic_task(
+            self._scheduler, interval, func, *args)
+        self.info('scheduled periodic task %s (interval: %.2fs)',
+                  event.action.__name__, interval)
 
     def threaded_task(self, func):
         """start function in a separated thread"""
@@ -455,8 +461,6 @@
             self.hm.call_hooks('before_server_shutdown', repo=self)
         self.shutting_down = True
         self.system_source.shutdown()
-        if self._tasks_manager is not None:
-            self._tasks_manager.stop()
         if not (self.config.creating or self.config.repairing
                 or self.config.quick_start):
             self.hm.call_hooks('server_shutdown', repo=self)