@@ -894,7 +894,7 @@ TYPED_TEST(SVSTieredIndexTestBasic, KNNSearch) {
894894 VecSimIndex_DeleteVector (svs_index, i);
895895 }
896896 ASSERT_EQ (flat_index->indexSize (), n * 2 / 3 );
897- ASSERT_EQ (svs_index->indexSize (), n / 2 );
897+ ASSERT_EQ (svs_index->indexLabelCount (), n / 2 );
898898 k = n * 2 / 3 ;
899899 cur_memory_usage = allocator->getAllocationSize ();
900900 runTopKSearchTest (tiered_index, query_0, k, ver_res_0);
@@ -909,7 +909,7 @@ TYPED_TEST(SVSTieredIndexTestBasic, KNNSearch) {
909909 VecSimIndex_DeleteVector (flat_index, i);
910910 }
911911 ASSERT_EQ (flat_index->indexSize (), n / 6 );
912- ASSERT_EQ (svs_index->indexSize (), n / 2 );
912+ ASSERT_EQ (svs_index->indexLabelCount (), n / 2 );
913913 k = n / 4 ;
914914 cur_memory_usage = allocator->getAllocationSize ();
915915 runTopKSearchTest (tiered_index, query_0, k, ver_res_0);
@@ -923,7 +923,7 @@ TYPED_TEST(SVSTieredIndexTestBasic, KNNSearch) {
923923 GenerateAndAddVector<TEST_DATA_T>(flat_index, dim, i, i);
924924 }
925925 ASSERT_EQ (flat_index->indexSize (), n * 2 / 3 );
926- ASSERT_EQ (svs_index->indexSize (), 0 );
926+ ASSERT_EQ (svs_index->indexLabelCount (), 0 );
927927 k = n / 3 ;
928928 cur_memory_usage = allocator->getAllocationSize ();
929929 runTopKSearchTest (tiered_index, query_0, k, ver_res_0);
@@ -1133,27 +1133,33 @@ TYPED_TEST(SVSTieredIndexTestBasic, markedDeleted) {
11331133
11341134 // Override a vector while in the backend
11351135 GenerateAndAddVector<TEST_DATA_T>(tiered_index, dim, 1 );
1136- ASSERT_EQ (tiered_index->indexSize (), n);
1136+ ASSERT_EQ (tiered_index->indexSize (), n + 1 );
1137+ ASSERT_EQ (tiered_index->indexLabelCount (), n);
1138+ ASSERT_EQ (tiered_index->GetBackendIndex ()->indexLabelCount (), n - 1 );
11371139 ASSERT_EQ (tiered_index->getNumMarkedDeleted (), 1 );
11381140 ASSERT_EQ (tiered_index->GetSVSIndex ()->getNumMarkedDeleted (), 1 );
11391141
1140- ASSERT_EQ (tiered_index->GetBackendIndex ()->indexSize (), n - 1 );
1142+ ASSERT_EQ (tiered_index->GetBackendIndex ()->indexSize (), n);
11411143 ASSERT_EQ (tiered_index->GetFlatIndex ()->indexSize (), 1 );
11421144
11431145 // Delete the overriden vector
11441146 VecSimIndex_DeleteVector (tiered_index, 1 );
1145- ASSERT_EQ (tiered_index->indexSize (), n - 1 );
1147+ ASSERT_EQ (tiered_index->indexSize (), n);
11461148 ASSERT_EQ (tiered_index->getNumMarkedDeleted (), 1 );
11471149 ASSERT_EQ (tiered_index->GetSVSIndex ()->getNumMarkedDeleted (), 1 );
1148- ASSERT_EQ (tiered_index->GetBackendIndex ()->indexSize (), n - 1 );
1150+ ASSERT_EQ (tiered_index->indexLabelCount (), n - 1 );
1151+ ASSERT_EQ (tiered_index->GetBackendIndex ()->indexLabelCount (), n - 1 );
1152+ ASSERT_EQ (tiered_index->GetBackendIndex ()->indexSize (), n);
11491153 ASSERT_EQ (tiered_index->GetFlatIndex ()->indexSize (), 0 );
11501154
1151- // Delete another arbirtrary vector
1155+ // Delete another arbitrary vector
11521156 VecSimIndex_DeleteVector (tiered_index, 0 );
1153- ASSERT_EQ (tiered_index->indexSize (), n - 2 );
1157+ ASSERT_EQ (tiered_index->indexSize (), n);
1158+ ASSERT_EQ (tiered_index->GetBackendIndex ()->indexSize (), n);
1159+ ASSERT_EQ (tiered_index->GetBackendIndex ()->indexLabelCount (), n - 2 );
1160+ ASSERT_EQ (tiered_index->indexLabelCount (), n - 2 );
11541161 ASSERT_EQ (tiered_index->getNumMarkedDeleted (), 2 );
11551162 ASSERT_EQ (tiered_index->GetSVSIndex ()->getNumMarkedDeleted (), 2 );
1156- ASSERT_EQ (tiered_index->GetBackendIndex ()->indexSize (), n - 2 );
11571163 ASSERT_EQ (tiered_index->GetFlatIndex ()->indexSize (), 0 );
11581164
11591165 // Empty Index
@@ -1167,6 +1173,8 @@ TYPED_TEST(SVSTieredIndexTestBasic, markedDeleted) {
11671173 ASSERT_EQ (tiered_index->GetSVSIndex ()->getNumMarkedDeleted (), 0 );
11681174 ASSERT_EQ (tiered_index->GetBackendIndex ()->indexSize (), 0 );
11691175 ASSERT_EQ (tiered_index->GetFlatIndex ()->indexSize (), 0 );
1176+ ASSERT_EQ (tiered_index->GetBackendIndex ()->indexLabelCount (), 0 );
1177+ ASSERT_EQ (tiered_index->indexLabelCount (), 0 );
11701178}
11711179
11721180TYPED_TEST (SVSTieredIndexTestBasic, deleteVectorMulti) {
@@ -2917,18 +2925,26 @@ TYPED_TEST(SVSTieredIndexTest, writeInPlaceMode) {
29172925 ASSERT_EQ (tiered_index->GetFlatIndex ()->indexSize (), 0 );
29182926
29192927 // Overwrite inplace - only in single-value mode
2928+ size_t expected_marked_deleted = 0 ;
29202929 if (!TypeParam::isMulti ()) {
29212930 TEST_DATA_T overwritten_vec[] = {1 , 1 , 1 , 1 };
29222931 tiered_index->addVector (overwritten_vec, vec_label);
2923- ASSERT_EQ (tiered_index->GetBackendIndex ()->indexSize (), 2 );
2932+ expected_marked_deleted++;
2933+ ASSERT_EQ (tiered_index->GetBackendIndex ()->indexSize (), 3 );
2934+ ASSERT_EQ (tiered_index->indexSize (), 3 );
2935+ ASSERT_EQ (tiered_index->indexLabelCount (), 2 );
29242936 ASSERT_EQ (tiered_index->GetFlatIndex ()->indexSize (), 0 );
29252937 ASSERT_EQ (tiered_index->getDistanceFrom_Unsafe (vec_label, overwritten_vec), 0 );
2938+ ASSERT_EQ (tiered_index->GetSVSIndex ()->getNumMarkedDeleted (), expected_marked_deleted);
29262939 }
2927- // Validate that the vector is removed in place .
2940+ // Validate that the vector is marked as deleted .
29282941 tiered_index->deleteVector (vec_label);
2929- ASSERT_EQ (tiered_index->GetBackendIndex ()->indexSize (), 1 );
2930- ASSERT_EQ (tiered_index->GetSVSIndex ()->getNumMarkedDeleted (), 0 );
2931- EXPECT_EQ (tiered_index->statisticInfo ().numberOfMarkedDeleted , 0 );
2942+ expected_marked_deleted++;
2943+ ASSERT_EQ (tiered_index->GetBackendIndex ()->indexSize (), TypeParam::isMulti () ? 2 : 3 );
2944+ ASSERT_EQ (tiered_index->indexLabelCount (), 1 );
2945+
2946+ ASSERT_EQ (tiered_index->GetSVSIndex ()->getNumMarkedDeleted (), expected_marked_deleted);
2947+ EXPECT_EQ (tiered_index->statisticInfo ().numberOfMarkedDeleted , expected_marked_deleted);
29322948}
29332949
29342950TYPED_TEST (SVSTieredIndexTest, switchWriteModes) {
@@ -3024,7 +3040,7 @@ TYPED_TEST(SVSTieredIndexTest, switchWriteModes) {
30243040 mock_thread_pool.thread_pool_join ();
30253041 // Verify that vectors were moved to SVS as expected
30263042 auto sz_f = tiered_index->GetFlatIndex ()->indexSize ();
3027- auto sz_b = tiered_index->GetBackendIndex ()->indexSize ();
3043+ auto sz_b = tiered_index->GetBackendIndex ()->indexLabelCount ();
30283044 EXPECT_LE (sz_f, this ->getUpdateThreshold ());
30293045 if (TypeParam::isMulti ()) {
30303046 ASSERT_EQ (tiered_index->indexLabelCount (), 2 * n_labels);
@@ -3097,25 +3113,23 @@ TYPED_TEST(SVSTieredIndexTestBasic, runGCAPI) {
30973113 ASSERT_EQ (tiered_index->indexSize (), n);
30983114 ASSERT_EQ (tiered_index->GetBackendIndex ()->indexSize (), n);
30993115
3100- // Delete all the vectors and wait for the thread pool to finish running the update jobs.
31013116 for (size_t i = 0 ; i < threshold; i++) {
31023117 tiered_index->deleteVector (i);
31033118 }
31043119 ASSERT_EQ (tiered_index->GetSVSIndex ()->getNumMarkedDeleted (), threshold);
31053120 EXPECT_EQ (tiered_index->statisticInfo ().numberOfMarkedDeleted , threshold);
31063121
3107- // Launch the BG threads loop that takes jobs from the queue and executes them.
3108- mock_thread_pool.init_threads ();
3109- mock_thread_pool.thread_pool_join ();
3110-
3111- ASSERT_EQ (tiered_index->indexSize (), n - threshold);
3122+ ASSERT_EQ (tiered_index->indexSize (), n);
3123+ ASSERT_EQ (tiered_index->indexLabelCount (), n - threshold);
3124+ ASSERT_EQ (tiered_index->GetBackendIndex ()->indexSize (), n);
3125+ ASSERT_EQ (tiered_index->GetBackendIndex ()->indexLabelCount (), n - threshold);
31123126 ASSERT_EQ (tiered_index->GetSVSIndex ()->indexStorageSize (), n);
3113- ASSERT_EQ (mock_thread_pool.jobQ .size (), 0 );
31143127 auto size_before_gc = tiered_index->getAllocationSize ();
31153128
31163129 // Run the GC API call, expect that we will clean up the SVS index.
31173130 VecSimTieredIndex_GC (tiered_index);
31183131 ASSERT_EQ (tiered_index->indexSize (), n - threshold);
3132+ ASSERT_EQ (tiered_index->GetBackendIndex ()->indexSize (), n - threshold);
31193133 ASSERT_EQ (tiered_index->GetSVSIndex ()->indexStorageSize (), n - threshold);
31203134 auto size_after_gc = tiered_index->getAllocationSize ();
31213135 // Expect that the size of the index was reduced.
@@ -3177,7 +3191,7 @@ TYPED_TEST(SVSTieredIndexTestBasic, switchDeleteModes) {
31773191 mock_thread_pool.thread_pool_join ();
31783192 // Verify that vectors were moved to SVS as expected
31793193 auto sz_f = tiered_index->GetFlatIndex ()->indexSize ();
3180- auto sz_b = tiered_index->GetBackendIndex ()->indexSize ();
3194+ auto sz_b = tiered_index->GetBackendIndex ()->indexLabelCount ();
31813195 EXPECT_LE (sz_f, update_threshold);
31823196 EXPECT_EQ (sz_f + sz_b, n);
31833197}
@@ -3270,14 +3284,17 @@ TYPED_TEST(SVSTieredIndexTestBasic, testSwapJournalSingle) {
32703284 // For single-value index, following vectors should be in the index:
32713285 // 0:deleted, 1: 10, 2: deleted, 3:3, ..., n-2:deleted n-1: 10(n-1), n+1: n+1;
32723286 // total: n-2 vectors and labels
3273- ASSERT_EQ (tiered_index->indexSize (), n - 2 );
32743287 ASSERT_EQ (tiered_index->indexLabelCount (), n - 2 );
3288+ EXPECT_EQ (tiered_index->GetBackendIndex ()->indexLabelCount (), n - 5 );
32753289
3290+ // We added 3 vectors to the flat index and removed 5 vectors from the backend index.
32763291 // Backend index: 0:deleted, 1:deleted, 2:deleted, 3:3, ..., n-2:deleted, n-1:deleted;
32773292 // total: n-5
3278- EXPECT_EQ (tiered_index->GetBackendIndex ()->indexSize (), n - 5 );
3293+ EXPECT_EQ (tiered_index->GetBackendIndex ()->indexSize (), n);
3294+ ASSERT_EQ (tiered_index->getNumMarkedDeleted (), 5 );
32793295 // Frontend index: 1:10, n-1:10(n-1), n+1:n+1
32803296 ASSERT_EQ (tiered_index->GetFlatIndex ()->indexSize (), 3 );
3297+ ASSERT_EQ (tiered_index->indexSize (), n + tiered_index->GetFlatIndex ()->indexSize ());
32813298
32823299 double abs_err = 1e-2 ; // Allow a larger relative error for quantization.
32833300 TEST_DATA_T expected_vector[dim];
@@ -3401,13 +3418,16 @@ TYPED_TEST(SVSTieredIndexTestBasic, testSwapJournalMulti) {
34013418 // For multi-value index, following vectors should be in the index:
34023419 // 0: deleted, 1: (1,10), 2: deleted, 3:3, ..., n-2: deleted n-1: 10(n-1), n+1: n+1;
34033420 // total: n-2 labels, n-1 vectors
3404- ASSERT_EQ (tiered_index->indexSize (), n - 1 );
34053421 ASSERT_EQ (tiered_index->indexLabelCount (), n - 2 );
3422+ EXPECT_EQ (tiered_index->GetBackendIndex ()->indexLabelCount (), n - 4 );
34063423
3424+ // We added 3 vectors to the flat index and removed 4 vectors from the backend index.
34073425 // Backend index: 0:deleted, 1:1, 2:deleted, 3:3, ..., n-2:deleted, n-1:deleted; total: n-4
3408- EXPECT_EQ (tiered_index->GetBackendIndex ()->indexSize (), n - 4 );
3426+ EXPECT_EQ (tiered_index->GetBackendIndex ()->indexSize (), n);
3427+ ASSERT_EQ (tiered_index->getNumMarkedDeleted (), 4 );
34093428 // Frontend index: 1:10, n-1:10(n-1), n+1:n+1
34103429 ASSERT_EQ (tiered_index->GetFlatIndex ()->indexSize (), 3 );
3430+ ASSERT_EQ (tiered_index->indexSize (), n + tiered_index->GetFlatIndex ()->indexSize ());
34113431
34123432 double abs_err = 1e-2 ; // Allow a larger relative error for quantization.
34133433 TEST_DATA_T expected_vector[dim];
0 commit comments