diff --git a/db/compaction_iterator.cc b/db/compaction_iterator.cc index a649a24a6e3a480f0fe82117ad556cbc683b0e74..bb4c87649d624b9bd1fc1c7cb97da3d4870060b9 100644 --- a/db/compaction_iterator.cc +++ b/db/compaction_iterator.cc @@ -423,15 +423,15 @@ void CompactionIterator::PrepareOutput() { inline SequenceNumber CompactionIterator::findEarliestVisibleSnapshot( SequenceNumber in, SequenceNumber* prev_snapshot) { assert(snapshots_->size()); - SequenceNumber prev __attribute__((unused)) = 0; + SequenceNumber prev __attribute__((__unused__)) = kMaxSequenceNumber; for (const auto cur : *snapshots_) { - assert(prev <= cur); + assert(prev == kMaxSequenceNumber || prev <= cur); if (cur >= in) { - *prev_snapshot = prev; + *prev_snapshot = prev == kMaxSequenceNumber ? 0 : prev; return cur; } prev = cur; - assert(prev); + assert(prev < kMaxSequenceNumber); } *prev_snapshot = prev; return kMaxSequenceNumber; diff --git a/db/db_test2.cc b/db/db_test2.cc index 17150104d8be13043fb573c6b530b68f0ae56a0c..7c02a6ffeaadb71f0988bbe2bdbf3ec1f7fb06b6 100644 --- a/db/db_test2.cc +++ b/db/db_test2.cc @@ -452,8 +452,7 @@ TEST_F(DBTest2, WalFilterTestWithChangeBatch) { for (size_t i = 0; i < batch_keys.size(); i++) { for (size_t j = 0; j < batch_keys[i].size(); j++) { - if (i >= change_records_from_index && j >= - num_keys_to_add_in_new_batch) { + if (i >= change_records_from_index && j >= num_keys_to_add_in_new_batch) { keys_must_not_exist.push_back(Slice(batch_keys[i][j])); } else { @@ -528,8 +527,7 @@ TEST_F(DBTest2, WalFilterTestWithChangeBatchExtraKeys) { // Reopen database with option to use WAL filter options = OptionsForLogIterTest(); options.wal_filter = &test_wal_filter_extra_keys; - Status status = TryReopenWithColumnFamilies({ "default", "pikachu" }, - options); + Status status = TryReopenWithColumnFamilies({"default", "pikachu"}, options); ASSERT_TRUE(status.IsNotSupported()); // Reopen without filter, now reopen should succeed - previous @@ -612,8 +610,7 @@ TEST_F(DBTest2, WalFilterTestWithColumnFamilies) { return "WalFilterTestWithColumnFamilies"; } - const std::map> & - GetColumnFamilyKeys() { + const std::map>& GetColumnFamilyKeys() { return cf_wal_keys_; } @@ -684,8 +681,7 @@ TEST_F(DBTest2, WalFilterTestWithColumnFamilies) { // verify that handles_[0] only has post_flush keys // while handles_[1] has pre and post flush keys auto cf_wal_keys = test_wal_filter_column_families.GetColumnFamilyKeys(); - auto name_id_map = - test_wal_filter_column_families.GetColumnFamilyNameIdMap(); + auto name_id_map = test_wal_filter_column_families.GetColumnFamilyNameIdMap(); size_t index = 0; auto keys_cf = cf_wal_keys[name_id_map[kDefaultColumnFamilyName]]; //default column-family, only post_flush keys are expected @@ -720,21 +716,13 @@ TEST_F(DBTest2, WalFilterTestWithColumnFamilies) { } #endif // ROCKSDB_LITE -TEST_F(DBTest2, DISABLED_FirstSnapshotTest) { +TEST_F(DBTest2, FirstSnapshotTest) { Options options; options.write_buffer_size = 100000; // Small write buffer options = CurrentOptions(options); CreateAndReopenWithCF({"pikachu"}, options); - // This snapshot will have sequence number 0. When compaction encounters - // this snapshot, CompactionIterator::findEarliestVisibleSnapshot() will - // assert as it expects non-zero snapshots. - // - // One fix would be to simply remove this assert. However, a better fix - // might - // be to always have db sequence numbers start from 1 so that no code is - // ever - // confused by 0. + // This snapshot will have sequence number 0 what is expected behaviour. const Snapshot* s1 = db_->GetSnapshot(); Put(1, "k1", std::string(100000, 'x')); // Fill memtable