diff options
author | Zaidoon Abd Al Hadi <43054535+zaidoon1@users.noreply.github.com> | 2023-11-30 10:53:44 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-30 15:53:44 +0000 |
commit | 9c847b1510a7bf717adda6e3cafa2b608087d138 (patch) | |
tree | c0e855b8cc6e11d2b4a331c58973fc46470c5295 | |
parent | 1c6ea8f81a2921594f05b2aae4f7cbd40ac89655 (diff) |
feat: Expose compact_on_deletion_collector_factory (#838)
-rw-r--r-- | src/db_options.rs | 25 | ||||
-rw-r--r-- | tests/test_rocksdb_options.rs | 18 |
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)")); +} |