From 25f15398163a500af6306e4991c07aade6788f6a Mon Sep 17 00:00:00 2001 From: simon Date: Fri, 12 Aug 2022 12:03:09 +0700 Subject: [PATCH] implement backup task lock, #278 --- tubearchivist/home/apps.py | 1 + tubearchivist/home/tasks.py | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/tubearchivist/home/apps.py b/tubearchivist/home/apps.py index 5f02ba0f..1c44bbcc 100644 --- a/tubearchivist/home/apps.py +++ b/tubearchivist/home/apps.py @@ -77,6 +77,7 @@ class StartupCheck: "dl_queue", "dl_queue_id", "rescan", + "run_backup", ] for lock in all_locks: response = self.redis_con.del_message(lock) diff --git a/tubearchivist/home/tasks.py b/tubearchivist/home/tasks.py index b3da7621..ae8e43e9 100644 --- a/tubearchivist/home/tasks.py +++ b/tubearchivist/home/tasks.py @@ -162,8 +162,19 @@ def run_manual_import(): @shared_task(name="run_backup") def run_backup(reason="auto"): """called from settings page, dump backup to zip file""" - backup_all_indexes(reason) - print("backup finished") + have_lock = False + my_lock = RedisArchivist().get_lock("run_backup") + + try: + have_lock = my_lock.acquire(blocking=False) + if have_lock: + backup_all_indexes(reason) + else: + print("Did not acquire lock for backup task.") + finally: + if have_lock: + my_lock.release() + print("backup finished") @shared_task