From 000a3970e0b2ac9712f0cc2750e207f13aa5d4b6 Mon Sep 17 00:00:00 2001 From: shaohuzhang1 <80892890+shaohuzhang1@users.noreply.github.com> Date: Mon, 17 Mar 2025 17:00:51 +0800 Subject: [PATCH] fix: Multi process startup document modification executed multiple times (#2581) --- apps/common/event/__init__.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/apps/common/event/__init__.py b/apps/common/event/__init__.py index a76500346..ddf6dd6f9 100644 --- a/apps/common/event/__init__.py +++ b/apps/common/event/__init__.py @@ -12,15 +12,22 @@ from .listener_manage import * from django.utils.translation import gettext as _ from ..db.sql_execute import update_execute +from common.lock.impl.file_lock import FileLock +lock = FileLock() update_document_status_sql = """ UPDATE "public"."document" SET status ="replace"("replace"("replace"(status, '1', '3'), '0', '3'), '4', '3') +WHERE status ~ '1|0|4' """ def run(): - # QuerySet(Document).filter(status__in=[Status.embedding, Status.queue_up]).update(**{'status': Status.error}) - QuerySet(Model).filter(status=setting.models.Status.DOWNLOAD).update(status=setting.models.Status.ERROR, - meta={'message': _('The download process was interrupted, please try again')}) - update_execute(update_document_status_sql, []) + if lock.try_lock('event_init', 30 * 30): + try: + QuerySet(Model).filter(status=setting.models.Status.DOWNLOAD).update(status=setting.models.Status.ERROR, + meta={'message': _( + 'The download process was interrupted, please try again')}) + update_execute(update_document_status_sql, []) + finally: + lock.un_lock('event_init')