From 40c6f3c72483be4cab10b0c88b5220a1dfa07c9f Mon Sep 17 00:00:00 2001
From: 8bitpd <51897400+lpdink@users.noreply.github.com>
Date: Wed, 7 Aug 2024 17:32:06 +0800
Subject: [PATCH] fix: add redis lock to AnalyticdbVector init (#6859)
Co-authored-by: xiaozeyu
---
.../datasource/vdb/analyticdb/analyticdb_vector.py | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/api/core/rag/datasource/vdb/analyticdb/analyticdb_vector.py b/api/core/rag/datasource/vdb/analyticdb/analyticdb_vector.py
index ce68fc2b2682df..b78e2a59b1eb6f 100644
--- a/api/core/rag/datasource/vdb/analyticdb/analyticdb_vector.py
+++ b/api/core/rag/datasource/vdb/analyticdb/analyticdb_vector.py
@@ -65,8 +65,15 @@ def __init__(self, collection_name: str, config: AnalyticdbConfig):
AnalyticdbVector._init = True
def _initialize(self) -> None:
- self._initialize_vector_database()
- self._create_namespace_if_not_exists()
+ cache_key = f"vector_indexing_{self.config.instance_id}"
+ lock_name = f"{cache_key}_lock"
+ with redis_client.lock(lock_name, timeout=20):
+ collection_exist_cache_key = f"vector_indexing_{self.config.instance_id}"
+ if redis_client.get(collection_exist_cache_key):
+ return
+ self._initialize_vector_database()
+ self._create_namespace_if_not_exists()
+ redis_client.set(collection_exist_cache_key, 1, ex=3600)
def _initialize_vector_database(self) -> None:
from alibabacloud_gpdb20160503 import models as gpdb_20160503_models