diff --git a/db/column_family.cc b/db/column_family.cc index cffd8b8982..90034715ea 100644 --- a/db/column_family.cc +++ b/db/column_family.cc @@ -223,7 +223,7 @@ ColumnFamilyData::ColumnFamilyData(const std::string& dbname, uint32_t id, // if dummy_versions is nullptr, then this is a dummy column family. if (dummy_versions != nullptr) { internal_stats_.reset( - new InternalStats(options_.num_levels, db_options->env)); + new InternalStats(options_.num_levels, db_options->env, this)); table_cache_.reset(new TableCache(&options_, storage_options, table_cache)); if (options_.compaction_style == kCompactionStyleUniversal) { compaction_picker_.reset( diff --git a/db/db_impl.cc b/db/db_impl.cc index 1f70127432..ebf63a2fc3 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -514,17 +514,16 @@ void DBImpl::MaybeDumpStats() { last_stats_dump_time_microsec_ = now_micros; DBPropertyType cf_property_type = GetPropertyType("rocksdb.cfstats"); + DBPropertyType db_property_type = GetPropertyType("rocksdb.dbstats"); std::string stats; { MutexLock l(&mutex_); for (auto cfd : *versions_->GetColumnFamilySet()) { - cfd->internal_stats()->GetProperty(cf_property_type, "rocksdb.cfstats", - &stats, cfd); + cfd->internal_stats()->GetProperty( + cf_property_type, "rocksdb.cfstats", &stats); } - DBPropertyType db_property_type = GetPropertyType("rocksdb.dbstats"); default_cf_internal_stats_->GetProperty( - db_property_type, "rocksdb.dbstats", &stats, - default_cf_handle_->cfd()); + db_property_type, "rocksdb.dbstats", &stats); } Log(options_.info_log, "------- DUMPING STATS -------"); Log(options_.info_log, "%s", stats.c_str()); @@ -4370,8 +4369,7 @@ bool DBImpl::GetProperty(ColumnFamilyHandle* column_family, auto cfd = cfh->cfd(); DBPropertyType property_type = GetPropertyType(property); MutexLock l(&mutex_); - return cfd->internal_stats()->GetProperty(property_type, property, value, - cfd); + return cfd->internal_stats()->GetProperty(property_type, property, value); } void DBImpl::GetApproximateSizes(ColumnFamilyHandle* column_family, diff --git a/db/internal_stats.cc b/db/internal_stats.cc index 74b4f9e634..1392d13f10 100644 --- a/db/internal_stats.cc +++ b/db/internal_stats.cc @@ -125,9 +125,8 @@ DBPropertyType GetPropertyType(const Slice& property) { } bool InternalStats::GetProperty(DBPropertyType property_type, - const Slice& property, std::string* value, - ColumnFamilyData* cfd) { - Version* current = cfd->current(); + const Slice& property, std::string* value) { + Version* current = cfd_->current(); Slice in = property; switch (property_type) { @@ -161,16 +160,16 @@ bool InternalStats::GetProperty(DBPropertyType property_type, return true; } case kStats: { - if (!GetProperty(kCFStats, "rocksdb.cfstats", value, cfd)) { + if (!GetProperty(kCFStats, "rocksdb.cfstats", value)) { return false; } - if (!GetProperty(kDBStats, "rocksdb.dbstats", value, cfd)) { + if (!GetProperty(kDBStats, "rocksdb.dbstats", value)) { return false; } return true; } case kCFStats: { - DumpCFStats(value, cfd); + DumpCFStats(value); return true; } case kDBStats: { @@ -181,11 +180,11 @@ bool InternalStats::GetProperty(DBPropertyType property_type, *value = current->DebugString(); return true; case kNumImmutableMemTable: - *value = std::to_string(cfd->imm()->size()); + *value = std::to_string(cfd_->imm()->size()); return true; case kMemtableFlushPending: // Return number of mem tables that are ready to flush (made immutable) - *value = std::to_string(cfd->imm()->IsFlushPending() ? 1 : 0); + *value = std::to_string(cfd_->imm()->IsFlushPending() ? 1 : 0); return true; case kCompactionPending: // 1 if the system already determines at least one compacdtion is needed. @@ -198,15 +197,15 @@ bool InternalStats::GetProperty(DBPropertyType property_type, return true; case kCurSizeActiveMemTable: // Current size of the active memtable - *value = std::to_string(cfd->mem()->ApproximateMemoryUsage()); + *value = std::to_string(cfd_->mem()->ApproximateMemoryUsage()); return true; case kNumEntriesInMutableMemtable: // Current size of the active memtable - *value = std::to_string(cfd->mem()->GetNumEntries()); + *value = std::to_string(cfd_->mem()->GetNumEntries()); return true; case kNumEntriesInImmutableMemtable: // Current size of the active memtable - *value = std::to_string(cfd->imm()->current()->GetTotalNumEntries()); + *value = std::to_string(cfd_->imm()->current()->GetTotalNumEntries()); return true; default: return false; @@ -283,12 +282,12 @@ void InternalStats::DumpDBStats(std::string* value) { db_stats_snapshot_.write_with_wal = write_with_wal; } -void InternalStats::DumpCFStats(std::string* value, ColumnFamilyData* cfd) { - Version* current = cfd->current(); +void InternalStats::DumpCFStats(std::string* value) { + Version* current = cfd_->current(); int num_levels_to_check = - (cfd->options()->compaction_style != kCompactionStyleUniversal && - cfd->options()->compaction_style != kCompactionStyleFIFO) + (cfd_->options()->compaction_style != kCompactionStyleUniversal && + cfd_->options()->compaction_style != kCompactionStyleFIFO) ? current->NumberLevels() - 1 : 1; // Compaction scores are sorted base on its value. Restore them to the @@ -310,7 +309,7 @@ void InternalStats::DumpCFStats(std::string* value, ColumnFamilyData* cfd) { char buf[1000]; // Per-ColumnFamily stats - PrintLevelStatsHeader(buf, sizeof(buf), cfd->GetName()); + PrintLevelStatsHeader(buf, sizeof(buf), cfd_->GetName()); value->append(buf); CompactionStats stats_sum(0); diff --git a/db/internal_stats.h b/db/internal_stats.h index 28d84364c5..c853a97ad8 100644 --- a/db/internal_stats.h +++ b/db/internal_stats.h @@ -64,7 +64,7 @@ class InternalStats { INTERNAL_DB_STATS_ENUM_MAX, }; - InternalStats(int num_levels, Env* env) + InternalStats(int num_levels, Env* env, ColumnFamilyData* cfd) : db_stats_(INTERNAL_DB_STATS_ENUM_MAX), cf_stats_value_(INTERNAL_CF_STATS_ENUM_MAX), cf_stats_count_(INTERNAL_CF_STATS_ENUM_MAX), @@ -76,6 +76,7 @@ class InternalStats { bg_error_count_(0), number_levels_(num_levels), env_(env), + cfd_(cfd), started_at_(env->NowMicros()) { for (int i = 0; i< INTERNAL_DB_STATS_ENUM_MAX; ++i) { db_stats_[i] = 0; @@ -189,11 +190,11 @@ class InternalStats { uint64_t BumpAndGetBackgroundErrorCount() { return ++bg_error_count_; } bool GetProperty(DBPropertyType property_type, const Slice& property, - std::string* value, ColumnFamilyData* cfd); + std::string* value); private: void DumpDBStats(std::string* value); - void DumpCFStats(std::string* value, ColumnFamilyData* cfd); + void DumpCFStats(std::string* value); // Per-DB stats std::vector db_stats_; @@ -254,6 +255,7 @@ class InternalStats { const int number_levels_; Env* env_; + ColumnFamilyData* cfd_; const uint64_t started_at_; };