From cfe43ed82073e1e7a429ea375c5aba7c7ee67fbf Mon Sep 17 00:00:00 2001 From: Dmitrii Ogn Date: Thu, 30 Jan 2025 14:20:14 +0300 Subject: [PATCH] Delete non-existant points test (#895) * Added warnings Added tests Added checks * Removed warning * Fixed non existent idx * Fixed text straightforwardness * Rebuild test --- qdrant_client/local/local_collection.py | 8 +++++--- tests/congruence_tests/test_delete_points.py | 13 ++++++++++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/qdrant_client/local/local_collection.py b/qdrant_client/local/local_collection.py index 5fcd91fe..9b38b13f 100644 --- a/qdrant_client/local/local_collection.py +++ b/qdrant_client/local/local_collection.py @@ -2247,12 +2247,14 @@ def delete_vectors( def _delete_ids(self, ids: list[types.PointId]) -> None: for point_id in ids: - idx = self.ids[point_id] - self.deleted[idx] = 1 + if point_id in self.ids: + idx = self.ids[point_id] + self.deleted[idx] = 1 if self.storage is not None: for point_id in ids: - self.storage.delete(point_id) + if point_id in self.ids: + self.storage.delete(point_id) def _filter_to_ids(self, delete_filter: types.Filter) -> list[models.ExtendedPointId]: mask = self._payload_and_non_deleted_mask(delete_filter) diff --git a/tests/congruence_tests/test_delete_points.py b/tests/congruence_tests/test_delete_points.py index a8f82ebb..9a7b484b 100644 --- a/tests/congruence_tests/test_delete_points.py +++ b/tests/congruence_tests/test_delete_points.py @@ -15,7 +15,6 @@ def test_delete_points(local_client, remote_client): points = generate_fixtures(100) vector = points[0].vector["image"] - local_client.upload_points(COLLECTION_NAME, points) remote_client.upload_points(COLLECTION_NAME, points, wait=True) @@ -43,6 +42,18 @@ def test_delete_points(local_client, remote_client): lambda c: c.search(COLLECTION_NAME, query_vector=NamedVector(name="image", vector=vector)), ) + #delete non-existent points + local_client.delete(COLLECTION_NAME, found_ids) + remote_client.delete(COLLECTION_NAME, found_ids) + + compare_collections(local_client, remote_client, 100, attrs=("points_count",)) + + compare_client_results( + local_client, + remote_client, + lambda c: c.search(COLLECTION_NAME, query_vector=NamedVector(name="image", vector=vector)), + ) + def test_delete_sparse_points(): points = generate_sparse_fixtures(100)