@@ -2728,6 +2728,30 @@ TEST_F(SearchFamilyTest, SetDoesNotUpdateIndexesBug) {
2728
2728
EXPECT_THAT (resp, AreDocIds (" k1" ));
2729
2729
}
2730
2730
2731
+ TEST_F (SearchFamilyTest, SortStoreDoesNotUpdateIndexesBug) {
2732
+ // Create an index over HASH
2733
+ auto resp = Run ({" FT.CREATE" , " index" , " ON" , " HASH" , " SCHEMA" , " field" , " TEXT" });
2734
+ EXPECT_THAT (resp, " OK" );
2735
+
2736
+ // Index a HASH document under k1
2737
+ resp = Run ({" HSET" , " k1" , " field" , " value" });
2738
+ EXPECT_THAT (resp, IntArg (1 ));
2739
+
2740
+ // Prepare a source list to sort and store into k1 (overwriting k1 to LIST)
2741
+ EXPECT_THAT (Run ({" RPUSH" , " lst" , " b" , " a" }), IntArg (2 ));
2742
+ // SORT lst STORE k1 -> changes type of k1 from HASH to LIST
2743
+ Run ({" SORT" , " lst" , " ALPHA" , " STORE" , " k1" });
2744
+
2745
+ // Rename away and recreate k1 as HASH again
2746
+ EXPECT_EQ (Run ({" RENAME" , " k1" , " anotherkey" }), " OK" );
2747
+ EXPECT_THAT (Run ({" HSET" , " k1" , " field" , " value" }), IntArg (1 ));
2748
+
2749
+ // If SORT/STORE failed to remove k1 from indexes, the re-index here should crash.
2750
+ // Successful run should contain only the new k1 document in the index.
2751
+ resp = Run ({" FT.SEARCH" , " index" , " *" });
2752
+ EXPECT_THAT (resp, AreDocIds (" k1" ));
2753
+ }
2754
+
2731
2755
TEST_F (SearchFamilyTest, BlockSizeOptionFtCreate) {
2732
2756
// Create an index with a block size option
2733
2757
auto resp = Run ({" FT.CREATE" , " index" , " ON" , " HASH" , " SCHEMA" , " number1" , " NUMERIC" , " BLOCKSIZE" ,
0 commit comments