From 2128eb31c9960d219b29659d93405ff705935a9f Mon Sep 17 00:00:00 2001 From: Volodymyr Yavdoshenko Date: Mon, 28 Apr 2025 14:01:04 +0300 Subject: [PATCH] fix: HNSW schema deleting document crash (#4987) fixed: https://github.com/dragonflydb/dragonfly/issues/4979 --- src/core/search/indices.cc | 5 ++++- src/server/search/search_family_test.cc | 12 ++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/core/search/indices.cc b/src/core/search/indices.cc index 9d77f1a1b..9f739b05c 100644 --- a/src/core/search/indices.cc +++ b/src/core/search/indices.cc @@ -281,7 +281,10 @@ struct HnswlibAdapter { } void Remove(DocId id) { - world_.markDelete(id); + try { + world_.markDelete(id); + } catch (const std::exception& e) { + } } vector> Knn(float* target, size_t k, std::optional ef) { diff --git a/src/server/search/search_family_test.cc b/src/server/search/search_family_test.cc index 00287c3c1..38dc0a9bd 100644 --- a/src/server/search/search_family_test.cc +++ b/src/server/search/search_family_test.cc @@ -2722,6 +2722,18 @@ TEST_F(SearchFamilyTest, JsonWithNullFields) { AreDocIds("doc:1", "doc:2")); } +TEST_F(SearchFamilyTest, TestHsetDeleteDocumentHnswSchemaCrash) { + EXPECT_EQ(Run({"FT.CREATE", "idx", "SCHEMA", "n", "NUMERIC", "v", "VECTOR", "HNSW", "8", "TYPE", + "FLOAT16", "DIM", "4", "DISTANCE_METRIC", "L2", "M", "65536"}), + "OK"); + + auto res = Run({"HSET", "doc", "n", "0"}); + EXPECT_EQ(res, 1); + + res = Run({"DEL", "doc"}); + EXPECT_EQ(res, 1); +} + TEST_F(SearchFamilyTest, RenameDocumentBetweenIndices) { absl::FlagSaver fs;