diff --git a/rocksdb/_rocksdb.pyx b/rocksdb/_rocksdb.pyx index ca31ec8ab4ee9307b7eae90a5d436d007d241ff6..4c233283b3819792ff348f24e2faea7eeeaacd3c 100644 --- a/rocksdb/_rocksdb.pyx +++ b/rocksdb/_rocksdb.pyx @@ -725,6 +725,12 @@ cdef class CompressionType(object): zstdnotfinal_compression = u'zstdnotfinal_compression' disable_compression = u'disable_compression' +cdef class CompactionPri(object): + by_compensated_size = u'by_compensated_size' + oldest_largest_seq_first = u'oldest_largest_seq_first' + oldest_smallest_seq_first = u'oldest_smallest_seq_first' + min_overlapping_ratio = u'min_overlapping_ratio' + cdef class Options(object): cdef options.Options* opts cdef PyComparator py_comparator @@ -829,6 +835,27 @@ cdef class Options(object): if 'max_dict_bytes' in value: copts.max_dict_bytes = value['max_dict_bytes'] + property compaction_pri: + def __get__(self): + if self.opts.compaction_pri == options.kByCompensatedSize: + return CompactionPri.by_compensated_size + if self.opts.compaction_pri == options.kOldestLargestSeqFirst: + return CompactionPri.oldest_largest_seq_first + if self.opts.compaction_pri == options.kOldestSmallestSeqFirst: + return CompactionPri.oldest_smallest_seq_first + if self.opts.compaction_pri == options.kMinOverlappingRatio: + return CompactionPri.min_overlapping_ratio + def __set__(self, value): + if value == CompactionPri.by_compensated_size: + self.opts.compaction_pri = options.kByCompensatedSize + elif value == CompactionPri.oldest_largest_seq_first: + self.opts.compaction_pri = options.kOldestLargestSeqFirst + elif value == CompactionPri.oldest_smallest_seq_first: + self.opts.compaction_pri = options.kOldestSmallestSeqFirst + elif value == CompactionPri.min_overlapping_ratio: + self.opts.compaction_pri = options.kMinOverlappingRatio + else: + raise TypeError("Unknown compaction pri: %s" % value) property compression: diff --git a/rocksdb/tests/test_options.py b/rocksdb/tests/test_options.py index ec2db4c67c3ad31673ebf5db4e69145c2973bc0a..fc9ec9471daccec0b52916b51cf2468b85e96e69 100644 --- a/rocksdb/tests/test_options.py +++ b/rocksdb/tests/test_options.py @@ -35,6 +35,17 @@ class TestOptions(unittest.TestCase): with self.assertRaises(TypeError): opts.merge_operator = "not an operator" + def test_compaction_pri(self): + opts = rocksdb.Options() + # default compaction_pri + self.assertEqual(opts.compaction_pri, rocksdb.CompactionPri.by_compensated_size) + opts.compaction_pri = rocksdb.CompactionPri.by_compensated_size + self.assertEqual(opts.compaction_pri, rocksdb.CompactionPri.by_compensated_size) + opts.compaction_pri = rocksdb.CompactionPri.oldest_largest_seq_first + self.assertEqual(opts.compaction_pri, rocksdb.CompactionPri.oldest_largest_seq_first) + opts.compaction_pri = rocksdb.CompactionPri.min_overlapping_ratio + self.assertEqual(opts.compaction_pri, rocksdb.CompactionPri.min_overlapping_ratio) + def test_compression_opts(self): opts = rocksdb.Options() compression_opts = opts.compression_opts