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:
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

View File

@ -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)