diff options
author | Anand Ananthabhotla <anand76@devvm1373.frc2.facebook.com> | 2018-09-20 15:08:20 -0700 |
---|---|---|
committer | Facebook Github Bot <facebook-github-bot@users.noreply.github.com> | 2018-09-20 15:15:28 -0700 |
commit | 72712f4e2840ae6a4c819d76daacb58432ba2041 (patch) | |
tree | 6f96f9e68ee1a16b624d4637a796fa07c1fb38c9 /db | |
parent | 02dc07491650b0c8d8470a24806ba86d09ea31a4 (diff) |
Allow dynamic modification of window size and deletion trigger (#4403)
Summary:
Make the CompactOnDeletionCollectorFactory class public, and provide
methods to update the window size and deletion trigger params. These
will take effect on subsequent created SST files.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/4403
Differential Revision: D9976857
Pulled By: anand1976
fbshipit-source-id: 31dbf0511c12fa2bb9b2a7ba620079e0ee09cf48
Diffstat (limited to 'db')
-rw-r--r-- | db/db_table_properties_test.cc | 53 |
1 files changed, 48 insertions, 5 deletions
diff --git a/db/db_table_properties_test.cc b/db/db_table_properties_test.cc index b12a56802..5a54fd81c 100644 --- a/db/db_table_properties_test.cc +++ b/db/db_table_properties_test.cc @@ -252,13 +252,14 @@ TEST_F(DBTablePropertiesTest, GetColumnFamilyNameProperty) { } TEST_F(DBTablePropertiesTest, DeletionTriggeredCompactionMarking) { - const int kNumKeys = 1000; - const int kWindowSize = 100; - const int kNumDelsTrigger = 90; + int kNumKeys = 1000; + int kWindowSize = 100; + int kNumDelsTrigger = 90; + std::shared_ptr<TablePropertiesCollectorFactory> compact_on_del = + NewCompactOnDeletionCollectorFactory(kWindowSize, kNumDelsTrigger); Options opts = CurrentOptions(); - opts.table_properties_collector_factories.emplace_back( - NewCompactOnDeletionCollectorFactory(kWindowSize, kNumDelsTrigger)); + opts.table_properties_collector_factories.emplace_back(compact_on_del); Reopen(opts); // add an L1 file to prevent tombstones from dropping due to obsolescence @@ -280,6 +281,48 @@ TEST_F(DBTablePropertiesTest, DeletionTriggeredCompactionMarking) { dbfull()->TEST_WaitForCompact(); ASSERT_EQ(0, NumTableFilesAtLevel(0)); ASSERT_GT(NumTableFilesAtLevel(1), 0); + + // Change the window size and deletion trigger and ensure new values take + // effect + kWindowSize = 50; + kNumDelsTrigger = 40; + static_cast<CompactOnDeletionCollectorFactory*> + (compact_on_del.get())->SetWindowSize(kWindowSize); + static_cast<CompactOnDeletionCollectorFactory*> + (compact_on_del.get())->SetDeletionTrigger(kNumDelsTrigger); + for (int i = 0; i < kNumKeys; ++i) { + if (i >= kNumKeys - kWindowSize && + i < kNumKeys - kWindowSize + kNumDelsTrigger) { + Delete(Key(i)); + } else { + Put(Key(i), "val"); + } + } + Flush(); + + dbfull()->TEST_WaitForCompact(); + ASSERT_EQ(0, NumTableFilesAtLevel(0)); + ASSERT_GT(NumTableFilesAtLevel(1), 0); + + // Change the window size to disable delete triggered compaction + kWindowSize = 0; + static_cast<CompactOnDeletionCollectorFactory*> + (compact_on_del.get())->SetWindowSize(kWindowSize); + static_cast<CompactOnDeletionCollectorFactory*> + (compact_on_del.get())->SetDeletionTrigger(kNumDelsTrigger); + for (int i = 0; i < kNumKeys; ++i) { + if (i >= kNumKeys - kWindowSize && + i < kNumKeys - kWindowSize + kNumDelsTrigger) { + Delete(Key(i)); + } else { + Put(Key(i), "val"); + } + } + Flush(); + + dbfull()->TEST_WaitForCompact(); + ASSERT_EQ(1, NumTableFilesAtLevel(0)); + } } // namespace rocksdb |