summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZaidoon Abd Al Hadi <43054535+zaidoon1@users.noreply.github.com>2023-11-30 10:53:44 -0500
committerGitHub <noreply@github.com>2023-11-30 15:53:44 +0000
commit9c847b1510a7bf717adda6e3cafa2b608087d138 (patch)
treec0e855b8cc6e11d2b4a331c58973fc46470c5295
parent1c6ea8f81a2921594f05b2aae4f7cbd40ac89655 (diff)
feat: Expose compact_on_deletion_collector_factory (#838)
-rw-r--r--src/db_options.rs25
-rw-r--r--tests/test_rocksdb_options.rs18
2 files changed, 43 insertions, 0 deletions
diff --git a/src/db_options.rs b/src/db_options.rs
index 2a13176..4fcefae 100644
--- a/src/db_options.rs
+++ b/src/db_options.rs
@@ -3153,6 +3153,31 @@ impl Options {
ffi::rocksdb_options_set_allow_ingest_behind(self.inner, c_uchar::from(val));
}
}
+
+ // A factory of a table property collector that marks an SST
+ // file as need-compaction when it observe at least "D" deletion
+ // entries in any "N" consecutive entries, or the ratio of tombstone
+ // entries >= deletion_ratio.
+ //
+ // `window_size`: is the sliding window size "N"
+ // `num_dels_trigger`: is the deletion trigger "D"
+ // `deletion_ratio`: if <= 0 or > 1, disable triggering compaction based on
+ // deletion ratio.
+ pub fn add_compact_on_deletion_collector_factory(
+ &mut self,
+ window_size: size_t,
+ num_dels_trigger: size_t,
+ deletion_ratio: f64,
+ ) {
+ unsafe {
+ ffi::rocksdb_options_add_compact_on_deletion_collector_factory_del_ratio(
+ self.inner,
+ window_size,
+ num_dels_trigger,
+ deletion_ratio,
+ );
+ }
+ }
}
impl Default for Options {
diff --git a/tests/test_rocksdb_options.rs b/tests/test_rocksdb_options.rs
index 29017a5..56d9491 100644
--- a/tests/test_rocksdb_options.rs
+++ b/tests/test_rocksdb_options.rs
@@ -247,3 +247,21 @@ fn test_lz4_compression() {
fn test_zstd_compression() {
test_compression_type(DBCompressionType::Zstd);
}
+
+#[test]
+fn test_add_compact_on_deletion_collector_factory() {
+ let n = DBPath::new("_rust_rocksdb_test_add_compact_on_deletion_collector_factory");
+
+ let mut opts = Options::default();
+ opts.create_if_missing(true);
+ opts.add_compact_on_deletion_collector_factory(5, 10, 0.5);
+ let _db = DB::open(&opts, &n).unwrap();
+
+ let mut rocksdb_log = fs::File::open(format!("{}/LOG", (&n).as_ref().to_str().unwrap()))
+ .expect("rocksdb creates a LOG file");
+ let mut settings = String::new();
+ rocksdb_log
+ .read_to_string(&mut settings)
+ .expect("can read the LOG file");
+ assert!(settings.contains("CompactOnDeletionCollector (Sliding window size = 5 Deletion trigger = 10 Deletion ratio = 0.5)"));
+}