Expose the stalling information through DB::GetProperty()
Summary: Add two DB properties: rocksdb.actual_delayed_write_rate and rocksdb.is_write_stooped, for people to know whether current writes are being throttled. Closes https://github.com/facebook/rocksdb/pull/2043 Differential Revision: D4782975 Pulled By: siying fbshipit-source-id: 6b2f5cf
This commit is contained in:
parent
b900f6e197
commit
bae811fca0
@ -213,6 +213,30 @@ class ColumnFamilyTest : public testing::Test {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsDbWriteStopped() {
|
||||||
|
#ifndef ROCKSDB_LITE
|
||||||
|
uint64_t v;
|
||||||
|
EXPECT_TRUE(dbfull()->GetIntProperty("rocksdb.is-write-stopped", &v));
|
||||||
|
return (v == 1);
|
||||||
|
#else
|
||||||
|
return dbfull()->TEST_write_controler().IsStopped();
|
||||||
|
#endif // !ROCKSDB_LITE
|
||||||
|
}
|
||||||
|
|
||||||
|
uint64_t GetDbDelayedWriteRate() {
|
||||||
|
#ifndef ROCKSDB_LITE
|
||||||
|
uint64_t v;
|
||||||
|
EXPECT_TRUE(
|
||||||
|
dbfull()->GetIntProperty("rocksdb.actual-delayed-write-rate", &v));
|
||||||
|
return v;
|
||||||
|
#else
|
||||||
|
if (!dbfull()->TEST_write_controler().NeedsDelay()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return dbfull()->TEST_write_controler().delayed_write_rate();
|
||||||
|
#endif // !ROCKSDB_LITE
|
||||||
|
}
|
||||||
|
|
||||||
void Destroy() {
|
void Destroy() {
|
||||||
Close();
|
Close();
|
||||||
ASSERT_OK(DestroyDB(dbname_, Options(db_options_, column_family_options_)));
|
ASSERT_OK(DestroyDB(dbname_, Options(db_options_, column_family_options_)));
|
||||||
@ -2453,173 +2477,165 @@ TEST_F(ColumnFamilyTest, WriteStallSingleColumnFamily) {
|
|||||||
|
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(50);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(50);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
|
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(201);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(201);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate, dbfull()->TEST_write_controler().delayed_write_rate());
|
ASSERT_EQ(kBaseRate, GetDbDelayedWriteRate());
|
||||||
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed());
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed());
|
||||||
|
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(400);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(400);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate / 1.25,
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate());
|
||||||
dbfull()->TEST_write_controler().delayed_write_rate());
|
|
||||||
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed());
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed());
|
||||||
|
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(500);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(500);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate / 1.25 / 1.25,
|
ASSERT_EQ(kBaseRate / 1.25 / 1.25, GetDbDelayedWriteRate());
|
||||||
dbfull()->TEST_write_controler().delayed_write_rate());
|
|
||||||
|
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(450);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(450);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate / 1.25,
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate());
|
||||||
dbfull()->TEST_write_controler().delayed_write_rate());
|
|
||||||
|
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(205);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(205);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate, dbfull()->TEST_write_controler().delayed_write_rate());
|
ASSERT_EQ(kBaseRate, GetDbDelayedWriteRate());
|
||||||
|
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(202);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(202);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate, dbfull()->TEST_write_controler().delayed_write_rate());
|
ASSERT_EQ(kBaseRate, GetDbDelayedWriteRate());
|
||||||
|
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(201);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(201);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate, dbfull()->TEST_write_controler().delayed_write_rate());
|
ASSERT_EQ(kBaseRate, GetDbDelayedWriteRate());
|
||||||
|
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(198);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(198);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
|
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(399);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(399);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate, dbfull()->TEST_write_controler().delayed_write_rate());
|
ASSERT_EQ(kBaseRate, GetDbDelayedWriteRate());
|
||||||
|
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(599);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(599);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate / 1.25,
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate());
|
||||||
dbfull()->TEST_write_controler().delayed_write_rate());
|
|
||||||
|
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(2001);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(2001);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(IsDbWriteStopped());
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed());
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed());
|
||||||
|
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(3001);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(3001);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(IsDbWriteStopped());
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
|
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(390);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(390);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate / 1.25,
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate());
|
||||||
dbfull()->TEST_write_controler().delayed_write_rate());
|
|
||||||
|
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(100);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(100);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
|
|
||||||
vstorage->set_l0_delay_trigger_count(100);
|
vstorage->set_l0_delay_trigger_count(100);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate, dbfull()->TEST_write_controler().delayed_write_rate());
|
ASSERT_EQ(kBaseRate, GetDbDelayedWriteRate());
|
||||||
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed());
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed());
|
||||||
|
|
||||||
vstorage->set_l0_delay_trigger_count(101);
|
vstorage->set_l0_delay_trigger_count(101);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate / 1.25,
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate());
|
||||||
dbfull()->TEST_write_controler().delayed_write_rate());
|
|
||||||
|
|
||||||
vstorage->set_l0_delay_trigger_count(0);
|
vstorage->set_l0_delay_trigger_count(0);
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(300);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(300);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate / 1.25 / 1.25,
|
ASSERT_EQ(kBaseRate / 1.25 / 1.25, GetDbDelayedWriteRate());
|
||||||
dbfull()->TEST_write_controler().delayed_write_rate());
|
|
||||||
|
|
||||||
vstorage->set_l0_delay_trigger_count(101);
|
vstorage->set_l0_delay_trigger_count(101);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate / 1.25 / 1.25 / 1.25,
|
ASSERT_EQ(kBaseRate / 1.25 / 1.25 / 1.25, GetDbDelayedWriteRate());
|
||||||
dbfull()->TEST_write_controler().delayed_write_rate());
|
|
||||||
|
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(200);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(200);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate / 1.25 / 1.25,
|
ASSERT_EQ(kBaseRate / 1.25 / 1.25, GetDbDelayedWriteRate());
|
||||||
dbfull()->TEST_write_controler().delayed_write_rate());
|
|
||||||
|
|
||||||
vstorage->set_l0_delay_trigger_count(0);
|
vstorage->set_l0_delay_trigger_count(0);
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(0);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(0);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
|
|
||||||
mutable_cf_options.disable_auto_compactions = true;
|
mutable_cf_options.disable_auto_compactions = true;
|
||||||
dbfull()->TEST_write_controler().set_delayed_write_rate(kBaseRate);
|
dbfull()->TEST_write_controler().set_delayed_write_rate(kBaseRate);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
|
|
||||||
vstorage->set_l0_delay_trigger_count(50);
|
vstorage->set_l0_delay_trigger_count(50);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
|
ASSERT_EQ(0, GetDbDelayedWriteRate());
|
||||||
ASSERT_EQ(kBaseRate, dbfull()->TEST_write_controler().delayed_write_rate());
|
ASSERT_EQ(kBaseRate, dbfull()->TEST_write_controler().delayed_write_rate());
|
||||||
|
|
||||||
vstorage->set_l0_delay_trigger_count(60);
|
vstorage->set_l0_delay_trigger_count(60);
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(300);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(300);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
|
ASSERT_EQ(0, GetDbDelayedWriteRate());
|
||||||
ASSERT_EQ(kBaseRate, dbfull()->TEST_write_controler().delayed_write_rate());
|
ASSERT_EQ(kBaseRate, dbfull()->TEST_write_controler().delayed_write_rate());
|
||||||
|
|
||||||
mutable_cf_options.disable_auto_compactions = false;
|
mutable_cf_options.disable_auto_compactions = false;
|
||||||
vstorage->set_l0_delay_trigger_count(70);
|
vstorage->set_l0_delay_trigger_count(70);
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(500);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(500);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate, dbfull()->TEST_write_controler().delayed_write_rate());
|
ASSERT_EQ(kBaseRate, GetDbDelayedWriteRate());
|
||||||
|
|
||||||
vstorage->set_l0_delay_trigger_count(71);
|
vstorage->set_l0_delay_trigger_count(71);
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(501);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(501);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate / 1.25,
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate());
|
||||||
dbfull()->TEST_write_controler().delayed_write_rate());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(ColumnFamilyTest, CompactionSpeedupSingleColumnFamily) {
|
TEST_F(ColumnFamilyTest, CompactionSpeedupSingleColumnFamily) {
|
||||||
@ -2711,60 +2727,55 @@ TEST_F(ColumnFamilyTest, WriteStallTwoColumnFamilies) {
|
|||||||
|
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(50);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(50);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
|
|
||||||
vstorage1->TEST_set_estimated_compaction_needed_bytes(201);
|
vstorage1->TEST_set_estimated_compaction_needed_bytes(201);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
|
|
||||||
vstorage1->TEST_set_estimated_compaction_needed_bytes(600);
|
vstorage1->TEST_set_estimated_compaction_needed_bytes(600);
|
||||||
cfd1->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd1->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate, dbfull()->TEST_write_controler().delayed_write_rate());
|
ASSERT_EQ(kBaseRate, GetDbDelayedWriteRate());
|
||||||
|
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(70);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(70);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate, dbfull()->TEST_write_controler().delayed_write_rate());
|
ASSERT_EQ(kBaseRate, GetDbDelayedWriteRate());
|
||||||
|
|
||||||
vstorage1->TEST_set_estimated_compaction_needed_bytes(800);
|
vstorage1->TEST_set_estimated_compaction_needed_bytes(800);
|
||||||
cfd1->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd1->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate / 1.25,
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate());
|
||||||
dbfull()->TEST_write_controler().delayed_write_rate());
|
|
||||||
|
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(300);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(300);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate / 1.25 / 1.25,
|
ASSERT_EQ(kBaseRate / 1.25 / 1.25, GetDbDelayedWriteRate());
|
||||||
dbfull()->TEST_write_controler().delayed_write_rate());
|
|
||||||
|
|
||||||
vstorage1->TEST_set_estimated_compaction_needed_bytes(700);
|
vstorage1->TEST_set_estimated_compaction_needed_bytes(700);
|
||||||
cfd1->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd1->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate / 1.25,
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate());
|
||||||
dbfull()->TEST_write_controler().delayed_write_rate());
|
|
||||||
|
|
||||||
vstorage->TEST_set_estimated_compaction_needed_bytes(500);
|
vstorage->TEST_set_estimated_compaction_needed_bytes(500);
|
||||||
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate / 1.25 / 1.25,
|
ASSERT_EQ(kBaseRate / 1.25 / 1.25, GetDbDelayedWriteRate());
|
||||||
dbfull()->TEST_write_controler().delayed_write_rate());
|
|
||||||
|
|
||||||
vstorage1->TEST_set_estimated_compaction_needed_bytes(600);
|
vstorage1->TEST_set_estimated_compaction_needed_bytes(600);
|
||||||
cfd1->RecalculateWriteStallConditions(mutable_cf_options);
|
cfd1->RecalculateWriteStallConditions(mutable_cf_options);
|
||||||
ASSERT_TRUE(!dbfull()->TEST_write_controler().IsStopped());
|
ASSERT_TRUE(!IsDbWriteStopped());
|
||||||
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
||||||
ASSERT_EQ(kBaseRate / 1.25,
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate());
|
||||||
dbfull()->TEST_write_controler().delayed_write_rate());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(ColumnFamilyTest, CompactionSpeedupTwoColumnFamilies) {
|
TEST_F(ColumnFamilyTest, CompactionSpeedupTwoColumnFamilies) {
|
||||||
|
@ -465,6 +465,8 @@ class DBImpl : public DB {
|
|||||||
return num_running_compactions_;
|
return num_running_compactions_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const WriteController& write_controller() { return write_controller_; }
|
||||||
|
|
||||||
// hollow transactions shell used for recovery.
|
// hollow transactions shell used for recovery.
|
||||||
// these will then be passed to TransactionDB so that
|
// these will then be passed to TransactionDB so that
|
||||||
// locks can be reacquired before writing can resume.
|
// locks can be reacquired before writing can resume.
|
||||||
|
@ -232,6 +232,9 @@ static const std::string aggregated_table_properties_at_level =
|
|||||||
aggregated_table_properties + "-at-level";
|
aggregated_table_properties + "-at-level";
|
||||||
static const std::string num_running_compactions = "num-running-compactions";
|
static const std::string num_running_compactions = "num-running-compactions";
|
||||||
static const std::string num_running_flushes = "num-running-flushes";
|
static const std::string num_running_flushes = "num-running-flushes";
|
||||||
|
static const std::string actual_delayed_write_rate =
|
||||||
|
"actual-delayed-write-rate";
|
||||||
|
static const std::string is_write_stopped = "is-write-stopped";
|
||||||
|
|
||||||
const std::string DB::Properties::kNumFilesAtLevelPrefix =
|
const std::string DB::Properties::kNumFilesAtLevelPrefix =
|
||||||
rocksdb_prefix + num_files_at_level_prefix;
|
rocksdb_prefix + num_files_at_level_prefix;
|
||||||
@ -297,6 +300,10 @@ const std::string DB::Properties::kAggregatedTableProperties =
|
|||||||
rocksdb_prefix + aggregated_table_properties;
|
rocksdb_prefix + aggregated_table_properties;
|
||||||
const std::string DB::Properties::kAggregatedTablePropertiesAtLevel =
|
const std::string DB::Properties::kAggregatedTablePropertiesAtLevel =
|
||||||
rocksdb_prefix + aggregated_table_properties_at_level;
|
rocksdb_prefix + aggregated_table_properties_at_level;
|
||||||
|
const std::string DB::Properties::kActualDelayedWriteRate =
|
||||||
|
rocksdb_prefix + actual_delayed_write_rate;
|
||||||
|
const std::string DB::Properties::kIsWriteStopped =
|
||||||
|
rocksdb_prefix + is_write_stopped;
|
||||||
|
|
||||||
const std::unordered_map<std::string, DBPropertyInfo>
|
const std::unordered_map<std::string, DBPropertyInfo>
|
||||||
InternalStats::ppt_name_to_info = {
|
InternalStats::ppt_name_to_info = {
|
||||||
@ -385,6 +392,11 @@ const std::unordered_map<std::string, DBPropertyInfo>
|
|||||||
{DB::Properties::kNumRunningCompactions,
|
{DB::Properties::kNumRunningCompactions,
|
||||||
{false, nullptr, &InternalStats::HandleNumRunningCompactions,
|
{false, nullptr, &InternalStats::HandleNumRunningCompactions,
|
||||||
nullptr}},
|
nullptr}},
|
||||||
|
{DB::Properties::kActualDelayedWriteRate,
|
||||||
|
{false, nullptr, &InternalStats::HandleActualDelayedWriteRate,
|
||||||
|
nullptr}},
|
||||||
|
{DB::Properties::kIsWriteStopped,
|
||||||
|
{false, nullptr, &InternalStats::HandleIsWriteStopped, nullptr}},
|
||||||
};
|
};
|
||||||
|
|
||||||
const DBPropertyInfo* GetPropertyInfo(const Slice& property) {
|
const DBPropertyInfo* GetPropertyInfo(const Slice& property) {
|
||||||
@ -716,6 +728,23 @@ bool InternalStats::HandleMinLogNumberToKeep(uint64_t* value, DBImpl* db,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool InternalStats::HandleActualDelayedWriteRate(uint64_t* value, DBImpl* db,
|
||||||
|
Version* version) {
|
||||||
|
const WriteController& wc = db->write_controller();
|
||||||
|
if (!wc.NeedsDelay()) {
|
||||||
|
*value = 0;
|
||||||
|
} else {
|
||||||
|
*value = wc.delayed_write_rate();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool InternalStats::HandleIsWriteStopped(uint64_t* value, DBImpl* db,
|
||||||
|
Version* version) {
|
||||||
|
*value = db->write_controller().IsStopped() ? 1 : 0;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void InternalStats::DumpDBStats(std::string* value) {
|
void InternalStats::DumpDBStats(std::string* value) {
|
||||||
char buf[1000];
|
char buf[1000];
|
||||||
// DB-level stats, only available from default column family
|
// DB-level stats, only available from default column family
|
||||||
|
@ -402,6 +402,9 @@ class InternalStats {
|
|||||||
bool HandleEstimateLiveDataSize(uint64_t* value, DBImpl* db,
|
bool HandleEstimateLiveDataSize(uint64_t* value, DBImpl* db,
|
||||||
Version* version);
|
Version* version);
|
||||||
bool HandleMinLogNumberToKeep(uint64_t* value, DBImpl* db, Version* version);
|
bool HandleMinLogNumberToKeep(uint64_t* value, DBImpl* db, Version* version);
|
||||||
|
bool HandleActualDelayedWriteRate(uint64_t* value, DBImpl* db,
|
||||||
|
Version* version);
|
||||||
|
bool HandleIsWriteStopped(uint64_t* value, DBImpl* db, Version* version);
|
||||||
|
|
||||||
// Total number of background errors encountered. Every time a flush task
|
// Total number of background errors encountered. Every time a flush task
|
||||||
// or compaction task fails, this counter is incremented. The failure can
|
// or compaction task fails, this counter is incremented. The failure can
|
||||||
|
@ -80,7 +80,6 @@ class WriteController {
|
|||||||
private:
|
private:
|
||||||
uint64_t NowMicrosMonotonic(Env* env);
|
uint64_t NowMicrosMonotonic(Env* env);
|
||||||
|
|
||||||
private:
|
|
||||||
friend class WriteControllerToken;
|
friend class WriteControllerToken;
|
||||||
friend class StopWriteToken;
|
friend class StopWriteToken;
|
||||||
friend class DelayWriteToken;
|
friend class DelayWriteToken;
|
||||||
|
@ -527,6 +527,13 @@ class DB {
|
|||||||
// one but only returns the aggregated table properties of the
|
// one but only returns the aggregated table properties of the
|
||||||
// specified level "N" at the target column family.
|
// specified level "N" at the target column family.
|
||||||
static const std::string kAggregatedTablePropertiesAtLevel;
|
static const std::string kAggregatedTablePropertiesAtLevel;
|
||||||
|
|
||||||
|
// "rocksdb.actual-delayed-write-rate" - returns the current actual delayed
|
||||||
|
// write rate. 0 means no delay.
|
||||||
|
static const std::string kActualDelayedWriteRate;
|
||||||
|
|
||||||
|
// "rocksdb.is-write-stopped" - Return 1 if write has been stopped.
|
||||||
|
static const std::string kIsWriteStopped;
|
||||||
};
|
};
|
||||||
#endif /* ROCKSDB_LITE */
|
#endif /* ROCKSDB_LITE */
|
||||||
|
|
||||||
@ -575,6 +582,8 @@ class DB {
|
|||||||
// "rocksdb.estimate-pending-compaction-bytes"
|
// "rocksdb.estimate-pending-compaction-bytes"
|
||||||
// "rocksdb.num-running-compactions"
|
// "rocksdb.num-running-compactions"
|
||||||
// "rocksdb.num-running-flushes"
|
// "rocksdb.num-running-flushes"
|
||||||
|
// "rocksdb.actual-delayed-write-rate"
|
||||||
|
// "rocksdb.is-write-stopped"
|
||||||
virtual bool GetIntProperty(ColumnFamilyHandle* column_family,
|
virtual bool GetIntProperty(ColumnFamilyHandle* column_family,
|
||||||
const Slice& property, uint64_t* value) = 0;
|
const Slice& property, uint64_t* value) = 0;
|
||||||
virtual bool GetIntProperty(const Slice& property, uint64_t* value) {
|
virtual bool GetIntProperty(const Slice& property, uint64_t* value) {
|
||||||
|
Loading…
Reference in New Issue
Block a user