Skip to content

Commit d138c0e

Browse files
committed
Add option set_compaction_pri
1 parent 6db8312 commit d138c0e

File tree

3 files changed

+47
-3
lines changed

3 files changed

+47
-3
lines changed

src/db_options.rs

+32
Original file line numberDiff line numberDiff line change
@@ -3529,6 +3529,28 @@ impl Options {
35293529
ffi::rocksdb_options_set_avoid_unnecessary_blocking_io(self.inner, u8::from(val));
35303530
}
35313531
}
3532+
3533+
/// Sets the compaction priority.
3534+
///
3535+
/// If level compaction_style =
3536+
/// kCompactionStyleLevel, for each level, which files are prioritized to be
3537+
/// picked to compact.
3538+
///
3539+
/// Default: `DBCompactionPri::MinOverlappingRatio`
3540+
///
3541+
/// # Examples
3542+
///
3543+
/// ```
3544+
/// use rust_rocksdb::{Options, DBCompactionPri};
3545+
///
3546+
/// let mut opts = Options::default();
3547+
/// opts.set_compaction_pri(DBCompactionPri::RoundRobin);
3548+
/// ```
3549+
pub fn set_compaction_pri(&mut self, pri: DBCompactionPri) {
3550+
unsafe {
3551+
ffi::rocksdb_options_set_compaction_pri(self.inner, pri as c_int);
3552+
}
3553+
}
35323554
}
35333555

35343556
impl Default for Options {
@@ -4166,6 +4188,16 @@ pub enum RateLimiterMode {
41664188
KAllIo = 2,
41674189
}
41684190

4191+
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
4192+
#[cfg_attr(feature = "serde1", derive(serde::Serialize, serde::Deserialize))]
4193+
pub enum DBCompactionPri {
4194+
ByCompensatedSize = ffi::rocksdb_k_by_compensated_size_compaction_pri as isize,
4195+
OldestLargestSeqFirst = ffi::rocksdb_k_oldest_largest_seq_first_compaction_pri as isize,
4196+
OldestSmallestSeqFirst = ffi::rocksdb_k_oldest_smallest_seq_first_compaction_pri as isize,
4197+
MinOverlappingRatio = ffi::rocksdb_k_min_overlapping_ratio_compaction_pri as isize,
4198+
RoundRobin = ffi::rocksdb_k_round_robin_compaction_pri as isize,
4199+
}
4200+
41694201
pub struct FifoCompactOptions {
41704202
pub(crate) inner: *mut ffi::rocksdb_fifo_compaction_options_t,
41714203
}

src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,8 @@ pub use crate::{
115115
},
116116
db_options::{
117117
BlockBasedIndexType, BlockBasedOptions, BottommostLevelCompaction, Cache, ChecksumType,
118-
CompactOptions, CuckooTableOptions, DBCompactionStyle, DBCompressionType, DBPath,
119-
DBRecoveryMode, DataBlockIndexType, FifoCompactOptions, FlushOptions,
118+
CompactOptions, CuckooTableOptions, DBCompactionPri, DBCompactionStyle, DBCompressionType,
119+
DBPath, DBRecoveryMode, DataBlockIndexType, FifoCompactOptions, FlushOptions,
120120
IngestExternalFileOptions, KeyEncodingType, LogLevel, MemtableFactory, Options,
121121
PlainTableFactoryOptions, RateLimiterMode, ReadOptions, ReadTier, UniversalCompactOptions,
122122
UniversalCompactionStopStyle, WaitForCompactOptions, WriteBufferManager, WriteOptions,

tests/test_rocksdb_options.rs

+13-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ mod util;
1717
use std::{fs, io::Read as _};
1818

1919
use rust_rocksdb::{
20-
BlockBasedOptions, Cache, DBCompressionType, DataBlockIndexType, Env, Options, ReadOptions, DB,
20+
BlockBasedOptions, Cache, DBCompactionPri, DBCompressionType, DataBlockIndexType, Env, Options,
21+
ReadOptions, DB,
2122
};
2223
use util::DBPath;
2324

@@ -351,3 +352,14 @@ fn test_set_ratelimiter() {
351352
assert_eq!(&*db.get(b"k2").unwrap().unwrap(), b"a");
352353
}
353354
}
355+
356+
#[test]
357+
fn test_set_compaction_pri() {
358+
let path = DBPath::new("_set_compaction_pri");
359+
{
360+
let mut opts = Options::default();
361+
opts.create_if_missing(true);
362+
opts.set_compaction_pri(DBCompactionPri::RoundRobin);
363+
let _db = DB::open(&opts, &path).unwrap();
364+
}
365+
}

0 commit comments

Comments
 (0)