summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Patsura <talk@dmtry.me>2023-11-27 11:05:25 +0100
committerGitHub <noreply@github.com>2023-11-27 10:05:25 +0000
commitb30f165e6502586145c1a9f44fb0fa31ab2420ff (patch)
treea712194dc3603ed221884da8e27f7227194e9638
parent2bbbf789345ce5bbc397a47efe3009afa0393c54 (diff)
feat: Expose set_wal_compression_type (#817)
-rw-r--r--src/db_options.rs25
-rw-r--r--tests/test_rocksdb_options.rs22
2 files changed, 47 insertions, 0 deletions
diff --git a/src/db_options.rs b/src/db_options.rs
index 360e6bf..dbf51dd 100644
--- a/src/db_options.rs
+++ b/src/db_options.rs
@@ -1065,6 +1065,31 @@ impl Options {
}
}
+ /// Sets the compression algorithm that will be used for compressing WAL.
+ ///
+ /// At present, only ZSTD compression is supported!
+ ///
+ /// Default: `DBCompressionType::None`
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// use rocksdb::{Options, DBCompressionType};
+ ///
+ /// let mut opts = Options::default();
+ /// opts.set_wal_compression_type(DBCompressionType::Zstd);
+ /// // Or None to disable it
+ /// opts.set_wal_compression_type(DBCompressionType::None);
+ /// ```
+ pub fn set_wal_compression_type(&mut self, t: DBCompressionType) {
+ match t {
+ DBCompressionType::None | DBCompressionType::Zstd => unsafe {
+ ffi::rocksdb_options_set_wal_compression(self.inner, t as c_int);
+ },
+ other => unimplemented!("{:?} is not supported for WAL compression", other),
+ }
+ }
+
/// Sets the bottom-most compression algorithm that will be used for
/// compressing blocks at the bottom-most level.
///
diff --git a/tests/test_rocksdb_options.rs b/tests/test_rocksdb_options.rs
index 7810c80..29017a5 100644
--- a/tests/test_rocksdb_options.rs
+++ b/tests/test_rocksdb_options.rs
@@ -171,6 +171,28 @@ fn set_compression_options_zstd_max_train_bytes() {
}
}
+#[test]
+fn set_wal_compression_zstd() {
+ let path = DBPath::new("_set_wal_compression_zstd");
+ {
+ let mut opts = Options::default();
+ opts.create_if_missing(true);
+ opts.set_wal_compression_type(DBCompressionType::None);
+ opts.set_wal_compression_type(DBCompressionType::Zstd);
+ let _db = DB::open(&opts, &path).unwrap();
+ }
+}
+
+#[test]
+#[should_panic(expected = "Lz4 is not supported for WAL compression")]
+fn set_wal_compression_unsupported() {
+ {
+ let mut opts = Options::default();
+ opts.create_if_missing(true);
+ opts.set_wal_compression_type(DBCompressionType::Lz4);
+ }
+}
+
fn test_compression_type(ty: DBCompressionType) {
let path = DBPath::new("_test_compression_type");