From 1f00ce570bf6aba5a553187f2808cae570e30adc Mon Sep 17 00:00:00 2001 From: bigeagle Date: Mon, 8 Dec 2014 16:09:03 +0800 Subject: [PATCH] clear delay when restarting and reloading --- tunasync/mirror_config.py | 22 ++++++++++++---------- tunasync/tunasync.py | 7 +++++-- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/tunasync/mirror_config.py b/tunasync/mirror_config.py index 21c6687..3015f48 100644 --- a/tunasync/mirror_config.py +++ b/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 diff --git a/tunasync/tunasync.py b/tunasync/tunasync.py index 4d75bc8..e35f594 100644 --- a/tunasync/tunasync.py +++ b/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)