Skip to content

Instantly share code, notes, and snippets.

@ajkr
Created November 9, 2016 20:45
Show Gist options
  • Save ajkr/851ffe4c1b8a15a68d33025be190a7d9 to your computer and use it in GitHub Desktop.
Save ajkr/851ffe4c1b8a15a68d33025be190a7d9 to your computer and use it in GitHub Desktop.
--- a/db/db_range_del_test.cc
+++ b/db/db_range_del_test.cc
@@ -61,6 +61,46 @@ TEST_F(DBRangeDelTest, CompactionOutputHasOnlyRangeTombstone) {
db_->ReleaseSnapshot(snapshot);
}
+TEST_F(DBRangeDelTest, FlushRangeDelsSameStartKey) {
+ db_->Put(WriteOptions(), "b1", "val");
+ ASSERT_OK(db_->DeleteRange(WriteOptions(), "a", "c"));
+ db_->Put(WriteOptions(), "b2", "val");
+ ASSERT_OK(db_->DeleteRange(WriteOptions(), "a", "b"));
+ // first iteration verifies query correctness in memtable, second verifies
+ // query correctness for a single SST file
+ for (int i = 0; i < 2; ++i) {
+ if (i > 0) {
+ ASSERT_OK(db_->Flush(FlushOptions()));
+ ASSERT_EQ(1, NumTableFilesAtLevel(0));
+ }
+ std::string value;
+ ASSERT_TRUE(db_->Get(ReadOptions(), "b1", &value).IsNotFound());
+ ASSERT_OK(db_->Get(ReadOptions(), "b2", &value));
+ }
+}
+
+TEST_F(DBRangeDelTest, CompactRangeDelsSameStartKey) {
+ db_->Put(WriteOptions(), "unused", "val"); // prevents empty after compaction
+ db_->Put(WriteOptions(), "b1", "val");
+ ASSERT_OK(db_->Flush(FlushOptions()));
+ ASSERT_OK(db_->DeleteRange(WriteOptions(), "a", "c"));
+ ASSERT_OK(db_->Flush(FlushOptions()));
+ ASSERT_OK(db_->DeleteRange(WriteOptions(), "a", "b"));
+ ASSERT_OK(db_->Flush(FlushOptions()));
+ ASSERT_EQ(3, NumTableFilesAtLevel(0));
+
+ for (int i = 0; i < 2; ++i) {
+ if (i > 0) {
+ dbfull()->TEST_CompactRange(0, nullptr, nullptr, nullptr,
+ true /* disallow_trivial_move */);
+ ASSERT_EQ(0, NumTableFilesAtLevel(0));
+ ASSERT_EQ(1, NumTableFilesAtLevel(1));
+ }
+ std::string value;
+ ASSERT_TRUE(db_->Get(ReadOptions(), "b1", &value).IsNotFound());
+ }
+}
+
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment