summaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
authorAnand Ananthabhotla <anand76@devvm1373.frc2.facebook.com>2018-09-20 15:08:20 -0700
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>2018-09-20 15:15:28 -0700
commit72712f4e2840ae6a4c819d76daacb58432ba2041 (patch)
tree6f96f9e68ee1a16b624d4637a796fa07c1fb38c9 /db
parent02dc07491650b0c8d8470a24806ba86d09ea31a4 (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.cc53
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