From 14e4102140a993c185f8bd55b93cc304adb9420c Mon Sep 17 00:00:00 2001 From: Yu Zhang Date: Fri, 6 Sep 2024 11:54:26 -0700 Subject: [PATCH] Move CalculateSSTWriteHint into VersionStorageInfo --- db/column_family.cc | 23 ----------------------- db/column_family.h | 2 -- db/compaction/compaction_job.cc | 10 +++++----- db/compaction/compaction_service_job.cc | 8 ++++---- db/db_impl/db_impl_open.cc | 3 ++- db/flush_job.cc | 2 +- db/repair.cc | 3 ++- db/version_set.cc | 21 +++++++++++++++++++++ db/version_set.h | 2 ++ 9 files changed, 37 insertions(+), 37 deletions(-) diff --git a/db/column_family.cc b/db/column_family.cc index 4a66506d38a..2b611fda7ca 100644 --- a/db/column_family.cc +++ b/db/column_family.cc @@ -1565,29 +1565,6 @@ Status ColumnFamilyData::SetOptions( return s; } -// REQUIRES: DB mutex held -Env::WriteLifeTimeHint ColumnFamilyData::CalculateSSTWriteHint(Version* version, - int level) { - if (initial_cf_options_.compaction_style != kCompactionStyleLevel) { - return Env::WLTH_NOT_SET; - } - if (level == 0) { - return Env::WLTH_MEDIUM; - } - int base_level = version->storage_info()->base_level(); - - // L1: medium, L2: long, ... - if (level - base_level >= 2) { - return Env::WLTH_EXTREME; - } else if (level < base_level) { - // There is no restriction which prevents level passed in to be smaller - // than base_level. - return Env::WLTH_MEDIUM; - } - return static_cast( - level - base_level + static_cast(Env::WLTH_MEDIUM)); -} - Status ColumnFamilyData::AddDirectories( std::map>* created_dirs) { Status s; diff --git a/db/column_family.h b/db/column_family.h index ce5da6d951e..e4b7adde89b 100644 --- a/db/column_family.h +++ b/db/column_family.h @@ -511,8 +511,6 @@ class ColumnFamilyData { return initial_cf_options_; } - Env::WriteLifeTimeHint CalculateSSTWriteHint(Version* version, int level); - // created_dirs remembers directory created, so that we don't need to call // the same data creation operation again. Status AddDirectories( diff --git a/db/compaction/compaction_job.cc b/db/compaction/compaction_job.cc index 4f18559b337..b4b4eeaceec 100644 --- a/db/compaction/compaction_job.cc +++ b/db/compaction/compaction_job.cc @@ -251,13 +251,13 @@ void CompactionJob::Prepare() { // Generate file_levels_ for compaction before making Iterator auto* c = compact_->compaction; - ColumnFamilyData* cfd = c->column_family_data(); + [[maybe_unused]] ColumnFamilyData* cfd = c->column_family_data(); assert(cfd != nullptr); - assert(c->input_version()->storage_info()->NumLevelFiles( - compact_->compaction->level()) > 0); + const VersionStorageInfo* storage_info = c->input_version()->storage_info(); + assert(storage_info); + assert(storage_info->NumLevelFiles(compact_->compaction->level()) > 0); - write_hint_ = - cfd->CalculateSSTWriteHint(c->input_version(), c->output_level()); + write_hint_ = storage_info->CalculateSSTWriteHint(c->output_level()); bottommost_level_ = c->bottommost_level(); if (c->ShouldFormSubcompactions()) { diff --git a/db/compaction/compaction_service_job.cc b/db/compaction/compaction_service_job.cc index de07217fb96..a923e4fcc49 100644 --- a/db/compaction/compaction_service_job.cc +++ b/db/compaction/compaction_service_job.cc @@ -261,11 +261,11 @@ Status CompactionServiceCompactionJob::Run() { auto* c = compact_->compaction; assert(c->column_family_data() != nullptr); - assert(c->input_version()->storage_info()->NumLevelFiles( - compact_->compaction->level()) > 0); + const VersionStorageInfo* storage_info = c->input_version()->storage_info(); + assert(storage_info); + assert(storage_info->NumLevelFiles(compact_->compaction->level()) > 0); - write_hint_ = c->column_family_data()->CalculateSSTWriteHint( - c->input_version(), c->output_level()); + write_hint_ = storage_info->CalculateSSTWriteHint(c->output_level()); bottommost_level_ = c->bottommost_level(); Slice begin = compaction_input_.begin; diff --git a/db/db_impl/db_impl_open.cc b/db/db_impl/db_impl_open.cc index cc7d0d6b70f..0697cc20f13 100644 --- a/db/db_impl/db_impl_open.cc +++ b/db/db_impl/db_impl_open.cc @@ -1681,7 +1681,8 @@ Status DBImpl::WriteLevel0TableForRecovery(int job_id, ColumnFamilyData* cfd, meta.oldest_ancester_time = current_time; meta.epoch_number = cfd->NewEpochNumber(); { - auto write_hint = cfd->CalculateSSTWriteHint(cfd->current(), /*level=*/0); + auto write_hint = + cfd->current()->storage_info()->CalculateSSTWriteHint(/*level=*/0); mutex_.Unlock(); SequenceNumber earliest_write_conflict_snapshot; diff --git a/db/flush_job.cc b/db/flush_job.cc index 1efb42ae05f..a164feb80a4 100644 --- a/db/flush_job.cc +++ b/db/flush_job.cc @@ -861,7 +861,7 @@ Status FlushJob::WriteLevel0Table() { std::vector blob_file_additions; { - auto write_hint = cfd_->CalculateSSTWriteHint(base_, /*level=*/0); + auto write_hint = base_->storage_info()->CalculateSSTWriteHint(/*level=*/0); Env::IOPriority io_priority = GetRateLimiterPriority(); db_mutex_->Unlock(); if (log_buffer_) { diff --git a/db/repair.cc b/db/repair.cc index 88974c3df25..114d36a6a82 100644 --- a/db/repair.cc +++ b/db/repair.cc @@ -451,7 +451,8 @@ class Repairer { meta.file_creation_time = current_time; SnapshotChecker* snapshot_checker = DisableGCSnapshotChecker::Instance(); - auto write_hint = cfd->CalculateSSTWriteHint(cfd->current(), /*level=*/0); + auto write_hint = + cfd->current()->storage_info()->CalculateSSTWriteHint(/*level=*/0); std::vector> range_del_iters; auto range_del_iter = mem->NewRangeTombstoneIterator( diff --git a/db/version_set.cc b/db/version_set.cc index e81165a3d2e..3b6ad44653b 100644 --- a/db/version_set.cc +++ b/db/version_set.cc @@ -4919,6 +4919,27 @@ bool VersionStorageInfo::RangeMightExistAfterSortedRun( return false; } +Env::WriteLifeTimeHint VersionStorageInfo::CalculateSSTWriteHint( + int level) const { + if (compaction_style_ != kCompactionStyleLevel) { + return Env::WLTH_NOT_SET; + } + if (level == 0) { + return Env::WLTH_MEDIUM; + } + + // L1: medium, L2: long, ... + if (level - base_level_ >= 2) { + return Env::WLTH_EXTREME; + } else if (level < base_level_) { + // There is no restriction which prevents level passed in to be smaller + // than base_level. + return Env::WLTH_MEDIUM; + } + return static_cast( + level - base_level_ + static_cast(Env::WLTH_MEDIUM)); +} + void Version::AddLiveFiles(std::vector* live_table_files, std::vector* live_blob_files) const { assert(live_table_files); diff --git a/db/version_set.h b/db/version_set.h index 9e80b3a4c06..eb027e79be3 100644 --- a/db/version_set.h +++ b/db/version_set.h @@ -626,6 +626,8 @@ class VersionStorageInfo { const Slice& largest_user_key, int last_level, int last_l0_idx); + Env::WriteLifeTimeHint CalculateSSTWriteHint(int level) const; + private: void ComputeCompensatedSizes(); void UpdateNumNonEmptyLevels();