InternalStats to take cfd on constructor

Summary:
It has one-to-one relationship with CFD. Take a pointer to CFD on
constructor to avoid passing cfd through member functions.

Test Plan: make

Reviewers: sdong, yhchiang, igor

Reviewed By: igor

Subscribers: leveldb

Differential Revision: https://reviews.facebook.net/D20565
This commit is contained in:
Lei Jin 2014-07-28 12:27:08 -07:00
parent 1bd3431f7c
commit 7e8bb71dd0
4 changed files with 26 additions and 27 deletions

View File

@ -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(

View File

@ -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,

View File

@ -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);

View File

@ -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<uint64_t> db_stats_;
@ -254,6 +255,7 @@ class InternalStats {
const int number_levels_;
Env* env_;
ColumnFamilyData* cfd_;
const uint64_t started_at_;
};