|
|
@ -513,6 +513,16 @@ class ColumnFamilyTestBase : public testing::Test { |
|
|
|
return static_cast<int>(files.size()); |
|
|
|
return static_cast<int>(files.size()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void RecalculateWriteStallConditions(ColumnFamilyData* cfd, |
|
|
|
|
|
|
|
const MutableCFOptions& mutable_cf_options) { |
|
|
|
|
|
|
|
// add lock to avoid race condition between
|
|
|
|
|
|
|
|
// `RecalculateWriteStallConditions` which writes to CFStats and
|
|
|
|
|
|
|
|
// background `DBImpl::DumpStats()` threads which read CFStats
|
|
|
|
|
|
|
|
dbfull()->TEST_LockMutex(); |
|
|
|
|
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
|
|
|
|
dbfull()-> TEST_UnlockMutex(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
std::vector<ColumnFamilyHandle*> handles_; |
|
|
|
std::vector<ColumnFamilyHandle*> handles_; |
|
|
|
std::vector<std::string> names_; |
|
|
|
std::vector<std::string> names_; |
|
|
|
std::vector<std::set<std::string>> keys_; |
|
|
|
std::vector<std::set<std::string>> keys_; |
|
|
@ -2500,139 +2510,139 @@ TEST_P(ColumnFamilyTest, WriteStallSingleColumnFamily) { |
|
|
|
mutable_cf_options.disable_auto_compactions = false; |
|
|
|
mutable_cf_options.disable_auto_compactions = false; |
|
|
|
|
|
|
|
|
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(50); |
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(50); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate, GetDbDelayedWriteRate()); |
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate()); |
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25 / 1.25, GetDbDelayedWriteRate()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25 / 1.25, GetDbDelayedWriteRate()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(450); |
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(450); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(205); |
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(205); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate, GetDbDelayedWriteRate()); |
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate, GetDbDelayedWriteRate()); |
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate, GetDbDelayedWriteRate()); |
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate, GetDbDelayedWriteRate()); |
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(2001); |
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(2001); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(IsDbWriteStopped()); |
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(IsDbWriteStopped()); |
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(100); |
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(100); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate, GetDbDelayedWriteRate()); |
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate()); |
|
|
|
|
|
|
|
|
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25 / 1.25, GetDbDelayedWriteRate()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25 / 1.25, GetDbDelayedWriteRate()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage->set_l0_delay_trigger_count(101); |
|
|
|
vstorage->set_l0_delay_trigger_count(101); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
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, GetDbDelayedWriteRate()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25 / 1.25 / 1.25, GetDbDelayedWriteRate()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(200); |
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(200); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25 / 1.25, GetDbDelayedWriteRate()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25 / 1.25, GetDbDelayedWriteRate()); |
|
|
|
|
|
|
|
|
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(0, GetDbDelayedWriteRate()); |
|
|
|
ASSERT_EQ(0, GetDbDelayedWriteRate()); |
|
|
@ -2640,7 +2650,7 @@ TEST_P(ColumnFamilyTest, WriteStallSingleColumnFamily) { |
|
|
|
|
|
|
|
|
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(0, GetDbDelayedWriteRate()); |
|
|
|
ASSERT_EQ(0, GetDbDelayedWriteRate()); |
|
|
@ -2649,14 +2659,14 @@ TEST_P(ColumnFamilyTest, WriteStallSingleColumnFamily) { |
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate, GetDbDelayedWriteRate()); |
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate()); |
|
|
@ -2681,31 +2691,31 @@ TEST_P(ColumnFamilyTest, CompactionSpeedupSingleColumnFamily) { |
|
|
|
mutable_cf_options.hard_pending_compaction_bytes_limit = 2000; |
|
|
|
mutable_cf_options.hard_pending_compaction_bytes_limit = 2000; |
|
|
|
|
|
|
|
|
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(40); |
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(40); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_EQ(1, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
ASSERT_EQ(1, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(50); |
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(50); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(300); |
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(300); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(45); |
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(45); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_EQ(1, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
ASSERT_EQ(1, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage->set_l0_delay_trigger_count(7); |
|
|
|
vstorage->set_l0_delay_trigger_count(7); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_EQ(1, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
ASSERT_EQ(1, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage->set_l0_delay_trigger_count(9); |
|
|
|
vstorage->set_l0_delay_trigger_count(9); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage->set_l0_delay_trigger_count(6); |
|
|
|
vstorage->set_l0_delay_trigger_count(6); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_EQ(1, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
ASSERT_EQ(1, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
|
|
|
|
|
|
|
|
// Speed up threshold = min(4 * 2, 4 + (12 - 4)/4) = 6
|
|
|
|
// Speed up threshold = min(4 * 2, 4 + (12 - 4)/4) = 6
|
|
|
@ -2714,15 +2724,15 @@ TEST_P(ColumnFamilyTest, CompactionSpeedupSingleColumnFamily) { |
|
|
|
mutable_cf_options.level0_stop_writes_trigger = 30; |
|
|
|
mutable_cf_options.level0_stop_writes_trigger = 30; |
|
|
|
|
|
|
|
|
|
|
|
vstorage->set_l0_delay_trigger_count(5); |
|
|
|
vstorage->set_l0_delay_trigger_count(5); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_EQ(1, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
ASSERT_EQ(1, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage->set_l0_delay_trigger_count(7); |
|
|
|
vstorage->set_l0_delay_trigger_count(7); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage->set_l0_delay_trigger_count(3); |
|
|
|
vstorage->set_l0_delay_trigger_count(3); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_EQ(1, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
ASSERT_EQ(1, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -2749,53 +2759,53 @@ TEST_P(ColumnFamilyTest, WriteStallTwoColumnFamilies) { |
|
|
|
mutable_cf_options1.soft_pending_compaction_bytes_limit = 500; |
|
|
|
mutable_cf_options1.soft_pending_compaction_bytes_limit = 500; |
|
|
|
|
|
|
|
|
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(50); |
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(50); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd1, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate, GetDbDelayedWriteRate()); |
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate, GetDbDelayedWriteRate()); |
|
|
|
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); |
|
|
|
RecalculateWriteStallConditions(cfd1, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(300); |
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(300); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25 / 1.25, GetDbDelayedWriteRate()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25 / 1.25, GetDbDelayedWriteRate()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage1->TEST_set_estimated_compaction_needed_bytes(700); |
|
|
|
vstorage1->TEST_set_estimated_compaction_needed_bytes(700); |
|
|
|
cfd1->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd1, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(500); |
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(500); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25 / 1.25, GetDbDelayedWriteRate()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25 / 1.25, GetDbDelayedWriteRate()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage1->TEST_set_estimated_compaction_needed_bytes(600); |
|
|
|
vstorage1->TEST_set_estimated_compaction_needed_bytes(600); |
|
|
|
cfd1->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd1, mutable_cf_options); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(!IsDbWriteStopped()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate()); |
|
|
|
ASSERT_EQ(kBaseRate / 1.25, GetDbDelayedWriteRate()); |
|
|
@ -2828,41 +2838,41 @@ TEST_P(ColumnFamilyTest, CompactionSpeedupTwoColumnFamilies) { |
|
|
|
mutable_cf_options1.level0_slowdown_writes_trigger = 16; |
|
|
|
mutable_cf_options1.level0_slowdown_writes_trigger = 16; |
|
|
|
|
|
|
|
|
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(40); |
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(40); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_EQ(1, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
ASSERT_EQ(1, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(60); |
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(60); |
|
|
|
cfd1->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd1, mutable_cf_options); |
|
|
|
ASSERT_EQ(1, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
ASSERT_EQ(1, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage1->TEST_set_estimated_compaction_needed_bytes(30); |
|
|
|
vstorage1->TEST_set_estimated_compaction_needed_bytes(30); |
|
|
|
cfd1->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd1, mutable_cf_options); |
|
|
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage1->TEST_set_estimated_compaction_needed_bytes(70); |
|
|
|
vstorage1->TEST_set_estimated_compaction_needed_bytes(70); |
|
|
|
cfd1->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd1, mutable_cf_options); |
|
|
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(20); |
|
|
|
vstorage->TEST_set_estimated_compaction_needed_bytes(20); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage1->TEST_set_estimated_compaction_needed_bytes(3); |
|
|
|
vstorage1->TEST_set_estimated_compaction_needed_bytes(3); |
|
|
|
cfd1->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd1, mutable_cf_options); |
|
|
|
ASSERT_EQ(1, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
ASSERT_EQ(1, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage->set_l0_delay_trigger_count(9); |
|
|
|
vstorage->set_l0_delay_trigger_count(9); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage1->set_l0_delay_trigger_count(2); |
|
|
|
vstorage1->set_l0_delay_trigger_count(2); |
|
|
|
cfd1->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd1, mutable_cf_options); |
|
|
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
ASSERT_EQ(6, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
|
|
|
|
|
|
|
|
vstorage->set_l0_delay_trigger_count(0); |
|
|
|
vstorage->set_l0_delay_trigger_count(0); |
|
|
|
cfd->RecalculateWriteStallConditions(mutable_cf_options); |
|
|
|
RecalculateWriteStallConditions(cfd, mutable_cf_options); |
|
|
|
ASSERT_EQ(1, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
ASSERT_EQ(1, dbfull()->TEST_BGCompactionsAllowed()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|