From 0f74e1fa0f06620ccc86f63e108bad3e97a4864a Mon Sep 17 00:00:00 2001 From: fengmk2 Date: Fri, 11 Jul 2025 16:30:58 +0800 Subject: [PATCH] fix(server): ignore 409 status error on es delete query (#13162) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit close AF-2736 #### PR Dependency Tree * **PR #13162** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) ## Summary by CodeRabbit * **Bug Fixes** * Improved error handling for Elasticsearch operations by allowing certain conflict errors to be ignored, resulting in more robust and tolerant behavior during data deletion processes. --- .../src/plugins/indexer/providers/elasticsearch.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/backend/server/src/plugins/indexer/providers/elasticsearch.ts b/packages/backend/server/src/plugins/indexer/providers/elasticsearch.ts index f80d765ce..3c7d920eb 100644 --- a/packages/backend/server/src/plugins/indexer/providers/elasticsearch.ts +++ b/packages/backend/server/src/plugins/indexer/providers/elasticsearch.ts @@ -140,10 +140,13 @@ export class ElasticsearchProvider extends SearchProvider { const result = await this.request( 'POST', url.toString(), - JSON.stringify({ query }) + JSON.stringify({ query }), + 'application/json', + // ignore 409 error: version_conflict_engine_exception, version conflict, required seqNo [255898790], primary term [3]. current document has seqNo [256133002] and primary term [3] + [409] ); this.logger.debug( - `deleted by query ${table} ${JSON.stringify(query)} in ${Date.now() - start}ms, result: ${JSON.stringify(result)}` + `deleted by query ${table} ${JSON.stringify(query)} in ${Date.now() - start}ms, result: ${JSON.stringify(result).substring(0, 500)}` ); } @@ -264,7 +267,8 @@ export class ElasticsearchProvider extends SearchProvider { method: 'POST' | 'PUT', url: string, body: string, - contentType = 'application/json' + contentType = 'application/json', + ignoreErrorStatus?: number[] ) { const headers = { 'Content-Type': contentType, @@ -280,6 +284,10 @@ export class ElasticsearchProvider extends SearchProvider { headers, }); const data = await response.json(); + if (ignoreErrorStatus?.includes(response.status)) { + return data; + } + // handle error, status >= 400 // { // "error": {