From f88b89e8735fe97dd92ecd724d2d625d84421db1 Mon Sep 17 00:00:00 2001 From: bigeagle Date: Fri, 24 Oct 2014 00:43:04 +0800 Subject: [PATCH] fail retry --- examples/shell_provider.sh | 1 + tunasync/jobs.py | 21 +++++++++++++-------- tunasync/tunasync.py | 3 ++- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/examples/shell_provider.sh b/examples/shell_provider.sh index cf328f1..b163003 100755 --- a/examples/shell_provider.sh +++ b/examples/shell_provider.sh @@ -2,3 +2,4 @@ echo $TUNASYNC_LOCAL_DIR echo $TUNASYNC_LOG_FILE sleep 5 +exit 1 diff --git a/tunasync/jobs.py b/tunasync/jobs.py index 254de24..a1521c4 100644 --- a/tunasync/jobs.py +++ b/tunasync/jobs.py @@ -7,7 +7,7 @@ import signal import Queue -def run_job(sema, child_q, manager_q, provider): +def run_job(sema, child_q, manager_q, provider, **settings): aquired = False setproctitle("tunasync-{}".format(provider.name)) @@ -20,24 +20,29 @@ def run_job(sema, child_q, manager_q, provider): signal.signal(signal.SIGTERM, before_quit) + max_retry = settings.get("max_retry", 1) while 1: try: sema.acquire(True) except: break aquired = True - print("start syncing {}".format(provider.name)) for hook in provider.hooks: hook.before_job(name=provider.name) - provider.run() + for retry in range(max_retry): + print("start syncing {}, retry: {}".format(provider.name, retry)) + provider.run() - status = "success" - try: - provider.wait() - except sh.ErrorReturnCode: - status = "fail" + status = "success" + try: + provider.wait() + except sh.ErrorReturnCode: + status = "fail" + + if status == "success": + break for hook in provider.hooks[::-1]: try: diff --git a/tunasync/tunasync.py b/tunasync/tunasync.py index 9f4b962..2cb1838 100644 --- a/tunasync/tunasync.py +++ b/tunasync/tunasync.py @@ -213,7 +213,8 @@ class TUNASync(object): child_queue = Queue() p = Process( 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']} ) p.start() self.processes[name] = (child_queue, p)