Summary:
This reverts commit 9167ece586
.
It was found to reliably trip a compaction picking conflict assertion in a MyRocks unit test. We don't understand why yet so reverting in the meantime.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/8410
Test Plan: `make check -j48`
Reviewed By: jay-zhuang
Differential Revision: D29150300
Pulled By: ajkr
fbshipit-source-id: 2de8664f355d6da015e84e5fec2e3f90f49741c8
This commit is contained in:
parent
32a4d59477
commit
25be1ed66a
@ -2,7 +2,7 @@
|
||||
## Unreleased
|
||||
### Behavior Changes
|
||||
* Added API comments clarifying safe usage of Disable/EnableManualCompaction and EventListener callbacks for compaction.
|
||||
* Obsolete keys in the bottommost level that were preserved for a snapshot will now be cleaned upon snapshot release in all cases. This form of compaction (snapshot release triggered compaction) previously had an artificial limitation that multiple tombstones needed to be present.
|
||||
|
||||
### Bug Fixes
|
||||
* fs_posix.cc GetFreeSpace() always report disk space available to root even when running as non-root. Linux defaults often have disk mounts with 5 to 10 percent of total space reserved only for root. Out of space could result for non-root users.
|
||||
* Subcompactions are now disabled when user-defined timestamps are used, since the subcompaction boundary picking logic is currently not timestamp-aware, which could lead to incorrect results when different subcompactions process keys that only differ by timestamp.
|
||||
|
@ -3049,7 +3049,8 @@ void VersionStorageInfo::ComputeBottommostFilesMarkedForCompaction() {
|
||||
bottommost_files_mark_threshold_ = kMaxSequenceNumber;
|
||||
for (auto& level_and_file : bottommost_files_) {
|
||||
if (!level_and_file.second->being_compacted &&
|
||||
level_and_file.second->fd.largest_seqno != 0) {
|
||||
level_and_file.second->fd.largest_seqno != 0 &&
|
||||
level_and_file.second->num_deletions > 1) {
|
||||
// largest_seqno might be nonzero due to containing the final key in an
|
||||
// earlier compaction, whose seqnum we didn't zero out. Multiple deletions
|
||||
// ensures the file really contains deleted or overwritten keys.
|
||||
|
@ -571,6 +571,7 @@ TEST_F(BlobDBTest, EnableDisableCompressionGC) {
|
||||
Random rnd(301);
|
||||
BlobDBOptions bdb_options;
|
||||
bdb_options.min_blob_size = 0;
|
||||
bdb_options.enable_garbage_collection = true;
|
||||
bdb_options.garbage_collection_cutoff = 1.0;
|
||||
bdb_options.disable_background_tasks = true;
|
||||
bdb_options.compression = kSnappyCompression;
|
||||
@ -599,11 +600,6 @@ TEST_F(BlobDBTest, EnableDisableCompressionGC) {
|
||||
ASSERT_EQ(2, blob_files.size());
|
||||
ASSERT_EQ(kNoCompression, blob_files[1]->GetCompressionType());
|
||||
|
||||
// Enable GC. If we do it earlier the snapshot release triggered compaction
|
||||
// may compact files and trigger GC before we can verify there are two files.
|
||||
bdb_options.enable_garbage_collection = true;
|
||||
Reopen(bdb_options);
|
||||
|
||||
// Trigger compaction
|
||||
ASSERT_OK(blob_db_->CompactRange(CompactRangeOptions(), nullptr, nullptr));
|
||||
blob_db_impl()->TEST_DeleteObsoleteFiles();
|
||||
@ -642,6 +638,7 @@ TEST_F(BlobDBTest, ChangeCompressionGC) {
|
||||
Random rnd(301);
|
||||
BlobDBOptions bdb_options;
|
||||
bdb_options.min_blob_size = 0;
|
||||
bdb_options.enable_garbage_collection = true;
|
||||
bdb_options.garbage_collection_cutoff = 1.0;
|
||||
bdb_options.disable_background_tasks = true;
|
||||
bdb_options.compression = kLZ4Compression;
|
||||
@ -671,11 +668,6 @@ TEST_F(BlobDBTest, ChangeCompressionGC) {
|
||||
ASSERT_EQ(2, blob_files.size());
|
||||
ASSERT_EQ(kSnappyCompression, blob_files[1]->GetCompressionType());
|
||||
|
||||
// Enable GC. If we do it earlier the snapshot release triggered compaction
|
||||
// may compact files and trigger GC before we can verify there are two files.
|
||||
bdb_options.enable_garbage_collection = true;
|
||||
Reopen(bdb_options);
|
||||
|
||||
ASSERT_OK(blob_db_->CompactRange(CompactRangeOptions(), nullptr, nullptr));
|
||||
VerifyDB(data);
|
||||
|
||||
|
@ -2587,7 +2587,6 @@ TEST_P(WritePreparedTransactionTest, ReleaseSnapshotDuringCompaction) {
|
||||
const size_t snapshot_cache_bits = 7; // same as default
|
||||
const size_t commit_cache_bits = 0; // minimum commit cache
|
||||
UpdateTransactionDBOptions(snapshot_cache_bits, commit_cache_bits);
|
||||
options.disable_auto_compactions = true;
|
||||
ASSERT_OK(ReOpen());
|
||||
|
||||
ASSERT_OK(db->Put(WriteOptions(), "key1", "value1_1"));
|
||||
@ -2607,13 +2606,7 @@ TEST_P(WritePreparedTransactionTest, ReleaseSnapshotDuringCompaction) {
|
||||
VerifyKeys({{"key1", "value1_1"}}, snapshot2);
|
||||
// Add a flush to avoid compaction to fallback to trivial move.
|
||||
|
||||
// The callback might be called twice, record the calling state to
|
||||
// prevent double calling.
|
||||
bool callback_finished = false;
|
||||
auto callback = [&](void*) {
|
||||
if (callback_finished) {
|
||||
return;
|
||||
}
|
||||
// Release snapshot1 after CompactionIterator init.
|
||||
// CompactionIterator need to figure out the earliest snapshot
|
||||
// that can see key1:value1_2 is kMaxSequenceNumber, not
|
||||
@ -2622,7 +2615,6 @@ TEST_P(WritePreparedTransactionTest, ReleaseSnapshotDuringCompaction) {
|
||||
// Add some keys to advance max_evicted_seq.
|
||||
ASSERT_OK(db->Put(WriteOptions(), "key3", "value3"));
|
||||
ASSERT_OK(db->Put(WriteOptions(), "key4", "value4"));
|
||||
callback_finished = true;
|
||||
};
|
||||
SyncPoint::GetInstance()->SetCallBack("CompactionIterator:AfterInit",
|
||||
callback);
|
||||
@ -2644,7 +2636,6 @@ TEST_P(WritePreparedTransactionTest, ReleaseSnapshotDuringCompaction2) {
|
||||
const size_t snapshot_cache_bits = 7; // same as default
|
||||
const size_t commit_cache_bits = 0; // minimum commit cache
|
||||
UpdateTransactionDBOptions(snapshot_cache_bits, commit_cache_bits);
|
||||
options.disable_auto_compactions = true;
|
||||
ASSERT_OK(ReOpen());
|
||||
|
||||
ASSERT_OK(db->Put(WriteOptions(), "key1", "value1"));
|
||||
@ -2695,7 +2686,6 @@ TEST_P(WritePreparedTransactionTest, ReleaseSnapshotDuringCompaction3) {
|
||||
const size_t snapshot_cache_bits = 7; // same as default
|
||||
const size_t commit_cache_bits = 1; // commit cache size = 2
|
||||
UpdateTransactionDBOptions(snapshot_cache_bits, commit_cache_bits);
|
||||
options.disable_auto_compactions = true;
|
||||
ASSERT_OK(ReOpen());
|
||||
|
||||
// Add a dummy key to evict v2 commit cache, but keep v1 commit cache.
|
||||
@ -2725,18 +2715,11 @@ TEST_P(WritePreparedTransactionTest, ReleaseSnapshotDuringCompaction3) {
|
||||
add_dummy();
|
||||
auto* s2 = db->GetSnapshot();
|
||||
|
||||
// The callback might be called twice, record the calling state to
|
||||
// prevent double calling.
|
||||
bool callback_finished = false;
|
||||
auto callback = [&](void*) {
|
||||
if (callback_finished) {
|
||||
return;
|
||||
}
|
||||
db->ReleaseSnapshot(s1);
|
||||
// Add some dummy entries to trigger s1 being cleanup from old_commit_map.
|
||||
add_dummy();
|
||||
add_dummy();
|
||||
callback_finished = true;
|
||||
};
|
||||
SyncPoint::GetInstance()->SetCallBack("CompactionIterator:AfterInit",
|
||||
callback);
|
||||
@ -2754,7 +2737,6 @@ TEST_P(WritePreparedTransactionTest, ReleaseEarliestSnapshotDuringCompaction) {
|
||||
const size_t snapshot_cache_bits = 7; // same as default
|
||||
const size_t commit_cache_bits = 0; // minimum commit cache
|
||||
UpdateTransactionDBOptions(snapshot_cache_bits, commit_cache_bits);
|
||||
options.disable_auto_compactions = true;
|
||||
ASSERT_OK(ReOpen());
|
||||
|
||||
ASSERT_OK(db->Put(WriteOptions(), "key1", "value1"));
|
||||
|
Loading…
Reference in New Issue
Block a user