From 7b4e6a0fdbaca35a8e43a0ae77c137fed9cf948e Mon Sep 17 00:00:00 2001 From: ifer47 <361301399@qq.com> Date: Wed, 17 Jun 2026 02:04:29 +0800 Subject: [PATCH 1/2] Fix retry task exiting early and skipping remaining documents In retry_document_indexing_task, two bugs caused the task to abort processing all remaining documents when a single document encountered an issue: 1. When a document was not found in the database, `return` was used instead of `continue`, causing the entire task to exit and skip all subsequent documents in the list. 2. When billing limit was exceeded, only the current document was marked as ERROR and had its Redis cache key cleaned up. All remaining documents were left with stale retry cache keys in Redis (potentially blocking future retries) and were not updated to reflect the error state. Co-Authored-By: zhipu/glm-5 --- api/tasks/retry_document_indexing_task.py | 26 +++++++++++++---------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/api/tasks/retry_document_indexing_task.py b/api/tasks/retry_document_indexing_task.py index fa02afda15f2ba..e9f021e6ea49f8 100644 --- a/api/tasks/retry_document_indexing_task.py +++ b/api/tasks/retry_document_indexing_task.py @@ -59,16 +59,20 @@ def retry_document_indexing_task(dataset_id: str, document_ids: list[str], user_ "your subscription." ) except Exception as e: - document = session.scalar( - select(Document).where(Document.id == document_id, Document.dataset_id == dataset_id).limit(1) - ) - if document: - document.indexing_status = IndexingStatus.ERROR - document.error = str(e) - document.stopped_at = naive_utc_now() - session.add(document) - session.commit() - redis_client.delete(retry_indexing_cache_key) + remaining_ids = document_ids[document_ids.index(document_id):] + for remaining_id in remaining_ids: + remaining_doc = session.scalar( + select(Document).where( + Document.id == remaining_id, Document.dataset_id == dataset_id + ).limit(1) + ) + if remaining_doc: + remaining_doc.indexing_status = IndexingStatus.ERROR + remaining_doc.error = str(e) + remaining_doc.stopped_at = naive_utc_now() + session.add(remaining_doc) + redis_client.delete(f"document_{remaining_id}_is_retried") + session.commit() return logger.info(click.style(f"Start retry document: {document_id}", fg="green")) @@ -77,7 +81,7 @@ def retry_document_indexing_task(dataset_id: str, document_ids: list[str], user_ ) if not document: logger.info(click.style(f"Document not found: {document_id}", fg="yellow")) - return + continue try: # clean old data index_processor = IndexProcessorFactory(document.doc_form).init_index_processor() From 00652bc3d46c36698edbd60153add245a74918e0 Mon Sep 17 00:00:00 2001 From: ifer47 <361301399@qq.com> Date: Fri, 19 Jun 2026 10:22:43 +0800 Subject: [PATCH 2/2] [autofix.ci] apply automated fixes --- api/tasks/retry_document_indexing_task.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/api/tasks/retry_document_indexing_task.py b/api/tasks/retry_document_indexing_task.py index e9f021e6ea49f8..2675b6b9ccbb7d 100644 --- a/api/tasks/retry_document_indexing_task.py +++ b/api/tasks/retry_document_indexing_task.py @@ -59,12 +59,12 @@ def retry_document_indexing_task(dataset_id: str, document_ids: list[str], user_ "your subscription." ) except Exception as e: - remaining_ids = document_ids[document_ids.index(document_id):] + remaining_ids = document_ids[document_ids.index(document_id) :] for remaining_id in remaining_ids: remaining_doc = session.scalar( - select(Document).where( - Document.id == remaining_id, Document.dataset_id == dataset_id - ).limit(1) + select(Document) + .where(Document.id == remaining_id, Document.dataset_id == dataset_id) + .limit(1) ) if remaining_doc: remaining_doc.indexing_status = IndexingStatus.ERROR