Skip to content

Commit cfa7e33

Browse files
update the retry behavior for failed insert request
Signed-off-by: min.tian <min.tian.cn@gmail.com>
1 parent 429e427 commit cfa7e33

4 files changed

Lines changed: 34 additions & 10 deletions

File tree

vectordb_bench/backend/clients/chroma/chroma.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def insert_embeddings(
6565
embeddings: list[list[float]],
6666
metadata: list[int],
6767
**kwargs: Any,
68-
) -> (int, Exception):
68+
) -> tuple[int, Exception]:
6969
"""Insert embeddings into the database.
7070
7171
Args:
@@ -78,8 +78,12 @@ def insert_embeddings(
7878
"""
7979
ids = [str(i) for i in metadata]
8080
metadata = [{"id": int(i)} for i in metadata]
81-
if len(embeddings) > 0:
82-
self.collection.add(embeddings=embeddings, ids=ids, metadatas=metadata)
81+
try:
82+
if len(embeddings) > 0:
83+
self.collection.add(embeddings=embeddings, ids=ids, metadatas=metadata)
84+
except Exception as e:
85+
log.warning(f"Failed to insert data: error: {e!s}")
86+
return 0, e
8387
return len(embeddings), None
8488

8589
def search_embedding(

vectordb_bench/backend/runner/mp_runner.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,11 @@ def search_by_dur(self, dur: int, test_data: list[list[float]], q: mp.Queue, con
258258
success_count += 1
259259
except Exception as e:
260260
failed_cnt += 1
261-
log.warning(f"VectorDB search_embedding error: {e}")
261+
# reduce log
262+
if failed_cnt <= 3:
263+
log.warning(f"VectorDB search_embedding error: {e}")
264+
else:
265+
log.debug(f"VectorDB search_embedding error: {e}")
262266

263267
# loop through the test data
264268
idx = idx + 1 if idx < num - 1 else 0

vectordb_bench/backend/runner/rate_runner.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,16 @@ def __init__(
3434
self.sig_idx = 0
3535

3636
def send_insert_task(self, db: api.VectorDB, emb: list[list[float]], metadata: list[str], retry_idx: int = 0):
37-
try:
38-
db.insert_embeddings(emb, metadata)
39-
except Exception as e:
40-
log.warning(f"Insert Failed, try_idx={retry_idx}, Exception: {e}")
37+
_, error = db.insert_embeddings(emb, metadata)
38+
if error is not None:
39+
log.warning(f"Insert Failed, try_idx={retry_idx}, Exception: {error}")
4140
retry_idx += 1
4241
if retry_idx <= config.MAX_INSERT_RETRY:
4342
time.sleep(retry_idx)
4443
self.send_insert_task(db, emb=emb, metadata=metadata, retry_idx=retry_idx)
4544
else:
4645
msg = f"Insert failed and retried more than {config.MAX_INSERT_RETRY} times"
47-
raise RuntimeError(msg) from e
46+
raise RuntimeError(msg) from None
4847

4948
@time_it
5049
def run_with_rate(self, q: mp.Queue):

vectordb_bench/backend/runner/serial_runner.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,18 @@ def __init__(
3838
self.normalize = normalize
3939
self.filters = filters
4040

41+
def retry_insert(self, db: api.VectorDB, retry_idx: int = 0, **kwargs):
42+
_, error = db.insert_embeddings(**kwargs)
43+
if error is not None:
44+
log.warning(f"Insert Failed, try_idx={retry_idx}, Exception: {error}")
45+
retry_idx += 1
46+
if retry_idx <= config.MAX_INSERT_RETRY:
47+
time.sleep(retry_idx)
48+
self.retry_insert(db, retry_idx=retry_idx, **kwargs)
49+
else:
50+
msg = f"Insert failed and retried more than {config.MAX_INSERT_RETRY} times"
51+
raise RuntimeError(msg) from None
52+
4153
def task(self) -> int:
4254
count = 0
4355
with self.db.init():
@@ -68,7 +80,12 @@ def task(self) -> int:
6880
labels_data=labels_data,
6981
)
7082
if error is not None:
71-
raise error
83+
self.retry_insert(
84+
self.db,
85+
embeddings=all_embeddings,
86+
metadata=all_metadata,
87+
labels_data=labels_data,
88+
)
7289

7390
assert insert_count == len(all_metadata)
7491
count += insert_count

0 commit comments

Comments
 (0)