Browse Source

clear delay when restarting and reloading

bigeagle 10 năm trước cách đây
mục cha
commit
1f00ce570b
2 tập tin đã thay đổi với 17 bổ sung12 xóa
  1. 12 10
      tunasync/mirror_config.py
  2. 5 2
      tunasync/tunasync.py

+ 12 - 10
tunasync/mirror_config.py

@@ -58,7 +58,7 @@ class MirrorConfig(object):
         else:
             return self.__dict__["options"].get(key, None)
 
-    def to_provider(self, hooks=[]):
+    def to_provider(self, hooks=[], no_delay=False):
         if self.provider == "rsync":
             provider = RsyncProvider(
                 name=self.name,
@@ -84,15 +84,17 @@ class MirrorConfig(object):
                 hooks=hooks
             )
 
-        sm = self._parent.status_manager
-        last_update = sm.get_info(self.name, 'last_update')
-        if last_update not in (None, '-'):
-            last_update = datetime.strptime(last_update, '%Y-%m-%d %H:%M:%S')
-            delay = int(last_update.strftime("%s")) \
-                + self.interval * 60 - int(datetime.now().strftime("%s"))
-            if delay < 0:
-                delay = 0
-            provider.set_delay(delay)
+        if not no_delay:
+            sm = self._parent.status_manager
+            last_update = sm.get_info(self.name, 'last_update')
+            if last_update not in (None, '-'):
+                last_update = datetime.strptime(last_update,
+                                                '%Y-%m-%d %H:%M:%S')
+                delay = int(last_update.strftime("%s")) \
+                    + self.interval * 60 - int(datetime.now().strftime("%s"))
+                if delay < 0:
+                    delay = 0
+                provider.set_delay(delay)
 
         return provider
 

+ 5 - 2
tunasync/tunasync.py

@@ -116,9 +116,11 @@ class TUNASync(object):
         p = Process(
             target=jobs.run_job,
             args=(self.semaphore, child_queue, self.channel, provider, ),
-            kwargs={'max_retry': self._settings['global']['max_retry']}
+            kwargs={
+                'max_retry': self._settings['global']['max_retry']}
         )
         p.start()
+        provider.set_delay(0)  # clear delay after first start
         self.processes[name] = (child_queue, p)
 
     def reload_mirrors(self, signum, frame):
@@ -150,7 +152,7 @@ class TUNASync(object):
             self._mirrors[name] = newMirCfg
 
             hooks = newMirCfg.hooks() + self.hooks()
-            newProvider = newMirCfg.to_provider(hooks)
+            newProvider = newMirCfg.to_provider(hooks, no_delay=True)
             self._providers[name] = newProvider
 
             if name in self.processes:
@@ -197,6 +199,7 @@ class TUNASync(object):
                 if cmd == "restart":
                     _, p = self.processes[name]
                     p.terminate()
+                    self.provides[name].set_delay(0)
                     self.run_provider(name)
                     res = "Restarted Job: {}".format(name)