From 99959ae2081169a0c487da464266f98ff78e15a8 Mon Sep 17 00:00:00 2001 From: Dmitriy Khaustov aka xDimon Date: Wed, 5 Nov 2025 10:35:11 +0300 Subject: [PATCH 1/5] support of `x-shadow` feature --- kvdb-rocksdb/Cargo.toml | 15 +++++++-------- kvdb-rocksdb/src/lib.rs | 12 ++++++++++++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/kvdb-rocksdb/Cargo.toml b/kvdb-rocksdb/Cargo.toml index 3d8040ce..2da65e6e 100644 --- a/kvdb-rocksdb/Cargo.toml +++ b/kvdb-rocksdb/Cargo.toml @@ -18,14 +18,7 @@ kvdb = { workspace = true } num_cpus = { workspace = true } parking_lot = { workspace = true } regex = { workspace = true } - -# OpenBSD and MSVC are unteested and shouldn't enable jemalloc: -# https://github.com/tikv/jemallocator/blob/52de4257fab3e770f73d5174c12a095b49572fba/jemalloc-sys/build.rs#L26-L27 -[target.'cfg(any(target_os = "openbsd", target_env = "msvc"))'.dependencies] -rocksdb = { workspace = true, features = ["snappy"] } - -[target.'cfg(not(any(target_os = "openbsd", target_env = "msvc")))'.dependencies] -rocksdb = { workspace = true, features = ["snappy", "jemalloc"] } +rocksdb = { workspace = true, default-features = false } [dev-dependencies] alloc_counter = { workspace = true } @@ -38,3 +31,9 @@ keccak-hash = { workspace = true } sysinfo = { workspace = true } ctrlc = { workspace = true } chrono = { workspace = true } + +[features] +default = ["snappy", "jemalloc"] +snappy = ["rocksdb/snappy"] +jemalloc = ["rocksdb/jemalloc"] +x-shadow = ["snappy"] \ No newline at end of file diff --git a/kvdb-rocksdb/src/lib.rs b/kvdb-rocksdb/src/lib.rs index 35c2c14e..f8437265 100644 --- a/kvdb-rocksdb/src/lib.rs +++ b/kvdb-rocksdb/src/lib.rs @@ -32,6 +32,18 @@ use std::fs::File; #[cfg(target_os = "linux")] use std::process::Command; +// Features 'x-shadow' and 'jemalloc' are mutually exclusive. Build kvdb-rocksdb with `default-features = false, features = ["x-shadow"]`. +#[cfg(all(feature = "x-shadow", feature = "jemalloc"))] +compile_error!("Features 'x-shadow' and 'jemalloc' are mutually exclusive"); + +// OpenBSD and MSVC are untested and shouldn't enable jemalloc +// https://github.com/tikv/jemallocator/blob/52de4257fab3e770f73d5174c12a095b49572fba/ +#[cfg(all( + feature = "jemalloc", + any(target_os = "openbsd", target_env = "msvc") +))] +compile_error!("OpenBSD and MSVC are untested and shouldn't enable jemalloc"); + fn other_io_err(e: E) -> io::Error where E: Into>, From 919fec18fce7a79bac6d4723f3630d5e1c99cdfd Mon Sep 17 00:00:00 2001 From: Dmitriy Khaustov aka xDimon Date: Mon, 17 Nov 2025 10:41:26 +0300 Subject: [PATCH 2/5] remove `x-shadow` feature --- kvdb-rocksdb/Cargo.toml | 8 +++----- kvdb-rocksdb/src/lib.rs | 4 ---- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/kvdb-rocksdb/Cargo.toml b/kvdb-rocksdb/Cargo.toml index 2da65e6e..5c203779 100644 --- a/kvdb-rocksdb/Cargo.toml +++ b/kvdb-rocksdb/Cargo.toml @@ -18,7 +18,7 @@ kvdb = { workspace = true } num_cpus = { workspace = true } parking_lot = { workspace = true } regex = { workspace = true } -rocksdb = { workspace = true, default-features = false } +rocksdb = { workspace = true, default-features = false, features = ["snappy"] } [dev-dependencies] alloc_counter = { workspace = true } @@ -33,7 +33,5 @@ ctrlc = { workspace = true } chrono = { workspace = true } [features] -default = ["snappy", "jemalloc"] -snappy = ["rocksdb/snappy"] -jemalloc = ["rocksdb/jemalloc"] -x-shadow = ["snappy"] \ No newline at end of file +default = [] +jemalloc = ["rocksdb/jemalloc"] \ No newline at end of file diff --git a/kvdb-rocksdb/src/lib.rs b/kvdb-rocksdb/src/lib.rs index f8437265..f02cb3d8 100644 --- a/kvdb-rocksdb/src/lib.rs +++ b/kvdb-rocksdb/src/lib.rs @@ -32,10 +32,6 @@ use std::fs::File; #[cfg(target_os = "linux")] use std::process::Command; -// Features 'x-shadow' and 'jemalloc' are mutually exclusive. Build kvdb-rocksdb with `default-features = false, features = ["x-shadow"]`. -#[cfg(all(feature = "x-shadow", feature = "jemalloc"))] -compile_error!("Features 'x-shadow' and 'jemalloc' are mutually exclusive"); - // OpenBSD and MSVC are untested and shouldn't enable jemalloc // https://github.com/tikv/jemallocator/blob/52de4257fab3e770f73d5174c12a095b49572fba/ #[cfg(all( From 0780c17df716ed71c85448cf542fae1cba57b15b Mon Sep 17 00:00:00 2001 From: Dmitriy Khaustov aka xDimon Date: Mon, 17 Nov 2025 14:10:39 +0300 Subject: [PATCH 3/5] bump version and update changelog --- kvdb-rocksdb/CHANGELOG.md | 3 +++ kvdb-rocksdb/Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/kvdb-rocksdb/CHANGELOG.md b/kvdb-rocksdb/CHANGELOG.md index 5a96342e..2989921c 100644 --- a/kvdb-rocksdb/CHANGELOG.md +++ b/kvdb-rocksdb/CHANGELOG.md @@ -6,6 +6,9 @@ The format is based on [Keep a Changelog]. ## [Unreleased] +## [0.20.2] - 2025-11-17 +- kvdb-rocksdb: Make snappy and jemalloc configurable features [#950](https://github.com/paritytech/parity-common/pull/950) + ## [0.20.1] - 2025-11-07 - Force compact the DB on startup and on heavy writes. [#949](https://github.com/paritytech/parity-common/pull/949) diff --git a/kvdb-rocksdb/Cargo.toml b/kvdb-rocksdb/Cargo.toml index 5c203779..d4f64708 100644 --- a/kvdb-rocksdb/Cargo.toml +++ b/kvdb-rocksdb/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "kvdb-rocksdb" -version = "0.20.1" +version = "0.20.2" description = "kvdb implementation backed by RocksDB" rust-version = "1.71.1" authors.workspace = true From d0d483800d0cce518c68c64936409392e11ee352 Mon Sep 17 00:00:00 2001 From: Dmitriy Khaustov aka xDimon Date: Mon, 17 Nov 2025 14:12:28 +0300 Subject: [PATCH 4/5] changelog fixup --- kvdb-rocksdb/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kvdb-rocksdb/CHANGELOG.md b/kvdb-rocksdb/CHANGELOG.md index 2989921c..8cb6ee9a 100644 --- a/kvdb-rocksdb/CHANGELOG.md +++ b/kvdb-rocksdb/CHANGELOG.md @@ -7,7 +7,7 @@ The format is based on [Keep a Changelog]. ## [Unreleased] ## [0.20.2] - 2025-11-17 -- kvdb-rocksdb: Make snappy and jemalloc configurable features [#950](https://github.com/paritytech/parity-common/pull/950) +- Make snappy and jemalloc configurable features [#950](https://github.com/paritytech/parity-common/pull/950) ## [0.20.1] - 2025-11-07 - Force compact the DB on startup and on heavy writes. [#949](https://github.com/paritytech/parity-common/pull/949) From e1d54c8edd1a9756fd13d0496c70c255aad4e7b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Mon, 17 Nov 2025 21:17:19 +0100 Subject: [PATCH 5/5] Apply suggestion from @bkchr --- kvdb-rocksdb/src/lib.rs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/kvdb-rocksdb/src/lib.rs b/kvdb-rocksdb/src/lib.rs index f02cb3d8..35c2c14e 100644 --- a/kvdb-rocksdb/src/lib.rs +++ b/kvdb-rocksdb/src/lib.rs @@ -32,14 +32,6 @@ use std::fs::File; #[cfg(target_os = "linux")] use std::process::Command; -// OpenBSD and MSVC are untested and shouldn't enable jemalloc -// https://github.com/tikv/jemallocator/blob/52de4257fab3e770f73d5174c12a095b49572fba/ -#[cfg(all( - feature = "jemalloc", - any(target_os = "openbsd", target_env = "msvc") -))] -compile_error!("OpenBSD and MSVC are untested and shouldn't enable jemalloc"); - fn other_io_err(e: E) -> io::Error where E: Into>,