From d93b57975c585305c88df6cb3e211c453414d5db Mon Sep 17 00:00:00 2001 From: Sam Chau Date: Wed, 8 Jan 2025 21:10:54 +1030 Subject: [PATCH] feat: enhance load_tasks_from_db method to remove old jobs before reloading tasks --- backend/app/task/tasks.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/backend/app/task/tasks.py b/backend/app/task/tasks.py index 464b3ed..d09b60c 100644 --- a/backend/app/task/tasks.py +++ b/backend/app/task/tasks.py @@ -50,15 +50,23 @@ class TaskScheduler: return cls._instance def load_tasks_from_db(self): + """ + Reload tasks from the DB, removing all old jobs first + so we don't collide with existing job IDs. + """ + self.logger.debug( + "[TaskScheduler] remove_all_jobs to avoid duplicates") + self.scheduler.remove_all_jobs() + with get_db() as conn: - tasks = conn.execute('SELECT * FROM scheduled_tasks').fetchall() - for task_data in tasks: - task_class = self.get_task_class(task_data['type']) + task_rows = conn.execute( + 'SELECT * FROM scheduled_tasks').fetchall() + for row in task_rows: + task_class = self.get_task_class(row['type']) if task_class: - task = task_class( - id=task_data['id'], - name=task_data['name'], - interval_minutes=task_data['interval_minutes']) + task = task_class(id=row['id'], + name=row['name'], + interval_minutes=row['interval_minutes']) self.schedule_task(task) def schedule_task(self, task):