Unverified Commit c480fea7 authored by Connor's avatar Connor Committed by GitHub

Fix discardable ratio count stat (#157)

After creating a new blob file meta, the live data size is 0. The stat is counted when adding the blob file but with live_data_size == 0. So we should update the stat when the live data size is initialized.
Signed-off-by: 's avatarConnor <zbk602423539@gmail.com>
parent 927ee609
......@@ -1143,7 +1143,14 @@ void TitanDBImpl::OnFlushCompleted(const FlushJobInfo& flush_job_info) {
assert(false);
delta = 0;
}
// the metrics is counted in the table builder when flushing,
// so update it when updateing the live data size.
SubStats(stats_.get(), flush_job_info.cf_id,
file->GetDiscardableRatioLevel(), 1);
file->set_live_data_size(static_cast<uint64_t>(delta));
AddStats(stats_.get(), flush_job_info.cf_id,
file->GetDiscardableRatioLevel(), 1);
file->FileStateTransit(BlobFileMeta::FileEvent::kFlushCompleted);
ROCKS_LOG_INFO(db_options_.info_log,
"OnFlushCompleted[%d]: output blob file %" PRIu64
......@@ -1232,7 +1239,11 @@ void TitanDBImpl::OnCompactionCompleted(
assert(false);
delta = 0;
}
SubStats(stats_.get(), compaction_job_info.cf_id,
file->GetDiscardableRatioLevel(), 1);
file->set_live_data_size(static_cast<uint64_t>(delta));
AddStats(stats_.get(), compaction_job_info.cf_id,
file->GetDiscardableRatioLevel(), 1);
file->FileStateTransit(BlobFileMeta::FileEvent::kCompactionCompleted);
to_merge_candidates.push_back(file);
ROCKS_LOG_INFO(
......
......@@ -83,7 +83,11 @@ Status TitanDBImpl::InitializeGC(
blob_storage->FindFile(file_size.first).lock();
if (file != nullptr) {
assert(file->live_data_size() == 0);
SubStats(stats_.get(), cf_handle->GetID(),
file->GetDiscardableRatioLevel(), 1);
file->set_live_data_size(static_cast<uint64_t>(file_size.second));
AddStats(stats_.get(), cf_handle->GetID(),
file->GetDiscardableRatioLevel(), 1);
}
}
blob_storage->InitializeAllFiles();
......
......@@ -416,6 +416,7 @@ TEST_F(TitanDBTest, DBIterSeek) {
}
TEST_F(TitanDBTest, GetProperty) {
options_.disable_background_gc = false;
Open();
for (uint64_t k = 1; k <= 100; k++) {
Put(k);
......@@ -424,9 +425,69 @@ TEST_F(TitanDBTest, GetProperty) {
uint64_t value;
ASSERT_TRUE(GetIntProperty(TitanDB::Properties::kNumLiveBlobFile, &value));
ASSERT_EQ(value, 1);
ASSERT_TRUE(
GetIntProperty(TitanDB::Properties::kNumDiscardableRatioLE0File, &value));
ASSERT_EQ(value, 1);
Reopen();
ASSERT_TRUE(GetIntProperty(TitanDB::Properties::kNumLiveBlobFile, &value));
ASSERT_EQ(value, 1);
ASSERT_TRUE(
GetIntProperty(TitanDB::Properties::kNumDiscardableRatioLE0File, &value));
ASSERT_EQ(value, 1);
ASSERT_TRUE(GetIntProperty(TitanDB::Properties::kNumDiscardableRatioLE20File,
&value));
ASSERT_EQ(value, 0);
ASSERT_TRUE(GetIntProperty(TitanDB::Properties::kNumDiscardableRatioLE50File,
&value));
ASSERT_EQ(value, 0);
ASSERT_TRUE(GetIntProperty(TitanDB::Properties::kNumDiscardableRatioLE80File,
&value));
ASSERT_EQ(value, 0);
ASSERT_TRUE(GetIntProperty(TitanDB::Properties::kNumDiscardableRatioLE100File,
&value));
ASSERT_EQ(value, 0);
for (uint64_t k = 1; k <= 100; k++) {
if (k % 3 == 0) Delete(k);
}
Flush();
CompactAll();
ASSERT_TRUE(
GetIntProperty(TitanDB::Properties::kNumDiscardableRatioLE0File, &value));
ASSERT_EQ(value, 0);
ASSERT_TRUE(GetIntProperty(TitanDB::Properties::kNumDiscardableRatioLE50File,
&value));
ASSERT_EQ(value, 1);
Reopen();
ASSERT_TRUE(
GetIntProperty(TitanDB::Properties::kNumDiscardableRatioLE0File, &value));
ASSERT_EQ(value, 0);
ASSERT_TRUE(GetIntProperty(TitanDB::Properties::kNumDiscardableRatioLE50File,
&value));
ASSERT_EQ(value, 1);
for (uint64_t k = 1; k <= 100; k++) {
if (k % 3 != 0) Delete(k);
}
Flush();
CompactAll();
db_impl_->TEST_WaitForBackgroundGC();
ASSERT_TRUE(GetIntProperty(TitanDB::Properties::kNumLiveBlobFile, &value));
ASSERT_EQ(value, 0);
ASSERT_TRUE(
GetIntProperty(TitanDB::Properties::kNumObsoleteBlobFile, &value));
ASSERT_EQ(value, 1);
ASSERT_OK(db_impl_->TEST_PurgeObsoleteFiles());
ASSERT_TRUE(
GetIntProperty(TitanDB::Properties::kNumObsoleteBlobFile, &value));
ASSERT_EQ(value, 0);
ASSERT_TRUE(GetIntProperty(TitanDB::Properties::kNumDiscardableRatioLE50File,
&value));
ASSERT_EQ(value, 0);
}
TEST_F(TitanDBTest, Snapshot) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment