diff --git a/db/compaction/compaction_service_test.cc b/db/compaction/compaction_service_test.cc index ad3fa1a5c85..52d24f061eb 100644 --- a/db/compaction/compaction_service_test.cc +++ b/db/compaction/compaction_service_test.cc @@ -483,21 +483,29 @@ TEST_F(CompactionServiceTest, PreservedOptionsRemoteCompaction) { ASSERT_OK(Flush()); } - bool is_primary_called = false; - // This will be called twice. One from primary and one from remote. - // Try changing the option when called from remote. Otherwise, the new option - // will be used + ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency( + {{"CompactionServiceTest::OptionsFileChanged", + "DBImplSecondary::OpenAndCompact::BeforeLoadingOptions:1"}}); + ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack( - "DBImpl::BackgroundCompaction:NonTrivial:BeforeRun", [&](void* /*arg*/) { - if (!is_primary_called) { - is_primary_called = true; - return; - } - // Change the option right before the compaction run + "DBImplSecondary::OpenAndCompact::BeforeLoadingOptions:0", + [&](void* arg) { + auto options_file_number = static_cast(arg); + // Change the option twice before the compaction run ASSERT_OK(dbfull()->SetOptions( {{"level0_file_num_compaction_trigger", "4"}})); ASSERT_EQ(4, dbfull()->GetOptions().level0_file_num_compaction_trigger); - dbfull()->TEST_DeleteObsoleteFiles(); + ASSERT_TRUE(dbfull()->versions_->options_file_number() > + *options_file_number); + + // Change the option twice before the compaction run + ASSERT_OK(dbfull()->SetOptions( + {{"level0_file_num_compaction_trigger", "5"}})); + ASSERT_EQ(5, dbfull()->GetOptions().level0_file_num_compaction_trigger); + ASSERT_TRUE(dbfull()->versions_->options_file_number() > + *options_file_number); + + TEST_SYNC_POINT("CompactionServiceTest::OptionsFileChanged"); }); ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack( diff --git a/db/db_impl/db_impl.cc b/db/db_impl/db_impl.cc index 9cb2c465d96..301bebda37d 100644 --- a/db/db_impl/db_impl.cc +++ b/db/db_impl/db_impl.cc @@ -5519,7 +5519,8 @@ Status DBImpl::WriteOptionsFile(const WriteOptions& write_options, file_name, fs_.get()); if (s.ok()) { - s = RenameTempFileToOptionsFile(file_name); + s = RenameTempFileToOptionsFile(file_name, + db_options.compaction_service != nullptr); } if (!s.ok() && GetEnv()->FileExists(file_name).ok()) { @@ -5596,7 +5597,8 @@ Status DBImpl::DeleteObsoleteOptionsFiles() { return Status::OK(); } -Status DBImpl::RenameTempFileToOptionsFile(const std::string& file_name) { +Status DBImpl::RenameTempFileToOptionsFile(const std::string& file_name, + bool is_remote_compaction_enabled) { Status s; uint64_t options_file_number = versions_->NewFileNumber(); @@ -5640,7 +5642,7 @@ Status DBImpl::RenameTempFileToOptionsFile(const std::string& file_name) { my_disable_delete_obsolete_files = disable_delete_obsolete_files_; } - if (!my_disable_delete_obsolete_files) { + if (!my_disable_delete_obsolete_files && !is_remote_compaction_enabled) { // TODO: Should we check for errors here? DeleteObsoleteOptionsFiles().PermitUncheckedError(); } diff --git a/db/db_impl/db_impl.h b/db/db_impl/db_impl.h index 4cc8e5bdd59..f82d8761aab 100644 --- a/db/db_impl/db_impl.h +++ b/db/db_impl/db_impl.h @@ -1469,7 +1469,8 @@ class DBImpl : public DB { // The following two functions can only be called when: // 1. WriteThread::Writer::EnterUnbatched() is used. // 2. db_mutex is NOT held - Status RenameTempFileToOptionsFile(const std::string& file_name); + Status RenameTempFileToOptionsFile(const std::string& file_name, + bool is_remote_compaction_enabled); Status DeleteObsoleteOptionsFiles(); void NotifyOnManualFlushScheduled(autovector cfds, diff --git a/db/db_impl/db_impl_secondary.cc b/db/db_impl/db_impl_secondary.cc index eb285e53b7e..de567be5d2d 100644 --- a/db/db_impl/db_impl_secondary.cc +++ b/db/db_impl/db_impl_secondary.cc @@ -956,6 +956,10 @@ Status DB::OpenAndCompact( config_options.env = override_options.env; std::vector all_column_families; + TEST_SYNC_POINT_CALLBACK( + "DBImplSecondary::OpenAndCompact::BeforeLoadingOptions:0", + &compaction_input.options_file_number); + TEST_SYNC_POINT("DBImplSecondary::OpenAndCompact::BeforeLoadingOptions:1"); std::string options_file_name = OptionsFileName(name, compaction_input.options_file_number); diff --git a/options/options_helper.cc b/options/options_helper.cc index e18c93435fd..d417a201fc8 100644 --- a/options/options_helper.cc +++ b/options/options_helper.cc @@ -201,6 +201,7 @@ void BuildDBOptions(const ImmutableDBOptions& immutable_db_options, options.metadata_write_temperature = immutable_db_options.metadata_write_temperature; options.wal_write_temperature = immutable_db_options.wal_write_temperature; + options.compaction_service = immutable_db_options.compaction_service; } ColumnFamilyOptions BuildColumnFamilyOptions(