Skip to content

Commit fcf9d33

Browse files
authored
Merge pull request #2 from iFA88/iFA88-patch-1
add bottommost_compression support
2 parents 3bd767e + 487b19b commit fcf9d33

File tree

3 files changed

+79
-4
lines changed

3 files changed

+79
-4
lines changed

rocksdb/_rocksdb.pyx

+76-4
Original file line numberDiff line numberDiff line change
@@ -936,6 +936,30 @@ cdef class ColumnFamilyOptions(object):
936936
if 'max_dict_bytes' in value:
937937
copts.max_dict_bytes = value['max_dict_bytes']
938938

939+
property bottommost_compression_opts:
940+
def __get__(self):
941+
cdef dict ret_ob = {}
942+
943+
ret_ob['window_bits'] = self.copts.bottommost_compression_opts.window_bits
944+
ret_ob['level'] = self.copts.bottommost_compression_opts.level
945+
ret_ob['strategy'] = self.copts.bottommost_compression_opts.strategy
946+
ret_ob['max_dict_bytes'] = self.copts.bottommost_compression_opts.max_dict_bytes
947+
948+
return ret_ob
949+
950+
def __set__(self, dict value):
951+
cdef options.CompressionOptions* copts
952+
copts = cython.address(self.copts.bottommost_compression_opts)
953+
# CompressionOptions(int wbits, int _lev, int _strategy, int _max_dict_bytes)
954+
if 'window_bits' in value:
955+
copts.window_bits = value['window_bits']
956+
if 'level' in value:
957+
copts.level = value['level']
958+
if 'strategy' in value:
959+
copts.strategy = value['strategy']
960+
if 'max_dict_bytes' in value:
961+
copts.max_dict_bytes = value['max_dict_bytes']
962+
939963
property compaction_pri:
940964
def __get__(self):
941965
if self.copts.compaction_pri == options.kByCompensatedSize:
@@ -1005,6 +1029,53 @@ cdef class ColumnFamilyOptions(object):
10051029
else:
10061030
raise TypeError("Unknown compression: %s" % value)
10071031

1032+
property bottommost_compression:
1033+
def __get__(self):
1034+
if self.copts.bottommost_compression == options.kNoCompression:
1035+
return CompressionType.no_compression
1036+
elif self.copts.bottommost_compression == options.kSnappyCompression:
1037+
return CompressionType.snappy_compression
1038+
elif self.copts.bottommost_compression == options.kZlibCompression:
1039+
return CompressionType.zlib_compression
1040+
elif self.copts.bottommost_compression == options.kBZip2Compression:
1041+
return CompressionType.bzip2_compression
1042+
elif self.copts.bottommost_compression == options.kLZ4Compression:
1043+
return CompressionType.lz4_compression
1044+
elif self.copts.bottommost_compression == options.kLZ4HCCompression:
1045+
return CompressionType.lz4hc_compression
1046+
elif self.copts.bottommost_compression == options.kXpressCompression:
1047+
return CompressionType.xpress_compression
1048+
elif self.copts.bottommost_compression == options.kZSTD:
1049+
return CompressionType.zstd_compression
1050+
elif self.copts.bottommost_compression == options.kZSTDNotFinalCompression:
1051+
return CompressionType.zstdnotfinal_compression
1052+
elif self.copts.bottommost_compression == options.kDisableCompressionOption:
1053+
return CompressionType.disable_compression
1054+
else:
1055+
raise Exception("Unknonw type: %s" % self.opts.compression)
1056+
1057+
def __set__(self, value):
1058+
if value == CompressionType.no_compression:
1059+
self.copts.bottommost_compression = options.kNoCompression
1060+
elif value == CompressionType.snappy_compression:
1061+
self.copts.bottommost_compression = options.kSnappyCompression
1062+
elif value == CompressionType.zlib_compression:
1063+
self.copts.bottommost_compression = options.kZlibCompression
1064+
elif value == CompressionType.bzip2_compression:
1065+
self.copts.bottommost_compression = options.kBZip2Compression
1066+
elif value == CompressionType.lz4_compression:
1067+
self.copts.bottommost_compression = options.kLZ4Compression
1068+
elif value == CompressionType.lz4hc_compression:
1069+
self.copts.bottommost_compression = options.kLZ4HCCompression
1070+
elif value == CompressionType.zstd_compression:
1071+
self.copts.bottommost_compression = options.kZSTD
1072+
elif value == CompressionType.zstdnotfinal_compression:
1073+
self.copts.bottommost_compression = options.kZSTDNotFinalCompression
1074+
elif value == CompressionType.disable_compression:
1075+
self.copts.bottommost_compression = options.kDisableCompressionOption
1076+
else:
1077+
raise TypeError("Unknown compression: %s" % value)
1078+
10081079
property max_compaction_bytes:
10091080
def __get__(self):
10101081
return self.copts.max_compaction_bytes
@@ -1294,7 +1365,7 @@ cdef class Options(ColumnFamilyOptions):
12941365
def __dealloc__(self):
12951366
if not self.opts == NULL:
12961367
with nogil:
1297-
del self.copts
1368+
self.copts = NULL
12981369
del self.opts
12991370

13001371
def __init__(self, **kwargs):
@@ -1758,7 +1829,7 @@ cdef class DB(object):
17581829
cdef ColumnFamilyOptions copts
17591830
cdef cpp_bool c_safe = safe
17601831
cdef Status st
1761-
if self.db != NULL:
1832+
if not self.db == NULL:
17621833
# We need stop backround compactions
17631834
with nogil:
17641835
db.CancelAllBackgroundWork(self.db, c_safe)
@@ -1769,11 +1840,12 @@ cdef class DB(object):
17691840
if copts:
17701841
copts.in_use = False
17711842
self.cf_options.clear()
1843+
if self.opts is not None:
1844+
self.opts.in_use = False
1845+
self.opts = None
17721846
with nogil:
17731847
self.db.Close()
17741848
self.db = NULL
1775-
if self.opts is not None:
1776-
self.opts.in_use = False
17771849

17781850
def __dealloc__(self):
17791851
self.close()

rocksdb/options.pxd

+2
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ cdef extern from "rocksdb/options.h" namespace "rocksdb":
119119
int max_write_buffer_number
120120
int min_write_buffer_number_to_merge
121121
CompressionType compression
122+
CompressionType bottommost_compression
122123
CompactionPri compaction_pri
123124
# TODO: compression_per_level
124125
shared_ptr[SliceTransform] prefix_extractor
@@ -157,6 +158,7 @@ cdef extern from "rocksdb/options.h" namespace "rocksdb":
157158
# TODO: remove options source_compaction_factor, max_grandparent_overlap_bytes and expanded_compaction_factor from document
158159
uint64_t max_compaction_bytes
159160
CompressionOptions compression_opts
161+
CompressionOptions bottommost_compression_opts
160162
cpp_bool optimize_filters_for_hits
161163
cpp_bool paranoid_file_checks
162164
cpp_bool level_compaction_dynamic_level_bytes

rocksdb/statistics.pxd

+1
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ cdef extern from "rocksdb/statistics.h" namespace "rocksdb":
1111

1212
cdef cppclass Statistics:
1313
void set_stats_level(StatsLevel) nogil except+
14+

0 commit comments

Comments
 (0)