clear delay when restarting and reloading

This commit is contained in:
bigeagle 2014-12-08 16:09:03 +08:00
parent c4c6d44987
commit 1f00ce570b
2 changed files with 17 additions and 12 deletions

View File

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

View File

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