From 14dd1c785a19f6c8ca70e55c2edf4ee6fe0584f9 Mon Sep 17 00:00:00 2001
From: hofmockel <dreagonfly@gmx.de>
Date: Wed, 22 Oct 2014 09:35:17 +0200
Subject: [PATCH] Move the 'simple' block based table options to the
 block_table_factory.

---
 rocksdb/_rocksdb.pyx      | 58 ++++++++++++++++++---------------------
 rocksdb/options.pxd       |  5 ----
 rocksdb/table_factory.pxd |  5 ++++
 3 files changed, 32 insertions(+), 36 deletions(-)

diff --git a/rocksdb/_rocksdb.pyx b/rocksdb/_rocksdb.pyx
index 147ff3e..8f25bd6 100644
--- a/rocksdb/_rocksdb.pyx
+++ b/rocksdb/_rocksdb.pyx
@@ -565,7 +565,12 @@ cdef class BlockBasedTableFactory(PyTableFactory):
     def __init__(self,
             index_type='binary_search',
             py_bool hash_index_allow_collision=True,
-            checksum='crc32'):
+            checksum='crc32',
+            no_block_cache=False,
+            block_size=None,
+            block_size_deviation=None,
+            block_restart_interval=None,
+            whole_key_filtering=None):
 
         cdef table_factory.BlockBasedTableOptions table_options
 
@@ -588,6 +593,27 @@ cdef class BlockBasedTableFactory(PyTableFactory):
         else:
             raise ValueError("Unknown checksum: %s" % checksum)
 
+        if no_block_cache:
+            table_options.no_block_cache = True
+        else:
+            table_options.no_block_cache = False
+
+        # If the following options are None use the rocksdb default.
+        if block_size is not None:
+            table_options.block_size = block_size
+
+        if block_size_deviation is not None:
+            table_options.block_size_deviation = block_size_deviation
+
+        if block_restart_interval is not None:
+            table_options.block_restart_interval = block_restart_interval
+
+        if whole_key_filtering is not None:
+            if whole_key_filtering:
+                table_options.whole_key_filtering = True
+            else:
+                table_options.whole_key_filtering = False
+
         self.factory.reset(table_factory.NewBlockBasedTableFactory(table_options))
 
 cdef class PlainTableFactory(PyTableFactory):
@@ -741,18 +767,6 @@ cdef class Options(object):
         def __set__(self, value):
             self.opts.max_open_files = value
 
-    property block_size:
-        def __get__(self):
-            return self.opts.block_size
-        def __set__(self, value):
-            self.opts.block_size = value
-
-    property block_restart_interval:
-        def __get__(self):
-            return self.opts.block_restart_interval
-        def __set__(self, value):
-            self.opts.block_restart_interval = value
-
     property compression:
         def __get__(self):
             if self.opts.compression == options.kNoCompression:
@@ -778,12 +792,6 @@ cdef class Options(object):
             else:
                 raise TypeError("Unknown compression: %s" % value)
 
-    property whole_key_filtering:
-        def __get__(self):
-            return self.opts.whole_key_filtering
-        def __set__(self, value):
-            self.opts.whole_key_filtering = value
-
     property num_levels:
         def __get__(self):
             return self.opts.num_levels
@@ -946,12 +954,6 @@ cdef class Options(object):
         def __set__(self, value):
             self.opts.max_manifest_file_size = value
 
-    property no_block_cache:
-        def __get__(self):
-            return self.opts.no_block_cache
-        def __set__(self, value):
-            self.opts.no_block_cache = value
-
     property table_cache_numshardbits:
         def __get__(self):
             return self.opts.table_cache_numshardbits
@@ -1036,12 +1038,6 @@ cdef class Options(object):
         def __set__(self, value):
             self.opts.stats_dump_period_sec = value
 
-    property block_size_deviation:
-        def __get__(self):
-            return self.opts.block_size_deviation
-        def __set__(self, value):
-            self.opts.block_size_deviation = value
-
     property advise_random_on_open:
         def __get__(self):
             return self.opts.advise_random_on_open
diff --git a/rocksdb/options.pxd b/rocksdb/options.pxd
index fd683bb..54abab4 100644
--- a/rocksdb/options.pxd
+++ b/rocksdb/options.pxd
@@ -47,13 +47,10 @@ cdef extern from "rocksdb/options.h" namespace "rocksdb":
         int max_open_files
         shared_ptr[Cache] block_cache
         shared_ptr[Cache] block_cache_compressed
-        size_t block_size
-        int block_restart_interval
         CompressionType compression
         # TODO: compression_per_level
         # TODO: compression_opts
         shared_ptr[SliceTransform] prefix_extractor
-        cpp_bool whole_key_filtering
         int num_levels
         int level0_file_num_compaction_trigger
         int level0_slowdown_writes_trigger
@@ -82,7 +79,6 @@ cdef extern from "rocksdb/options.h" namespace "rocksdb":
         double hard_rate_limit
         unsigned int rate_limit_delay_max_milliseconds
         uint64_t max_manifest_file_size
-        cpp_bool no_block_cache
         int table_cache_numshardbits
         int table_cache_remove_scan_count_limit
         size_t arena_block_size
@@ -98,7 +94,6 @@ cdef extern from "rocksdb/options.h" namespace "rocksdb":
         cpp_bool is_fd_close_on_exec
         cpp_bool skip_log_error_on_recovery
         unsigned int stats_dump_period_sec
-        int block_size_deviation
         cpp_bool advise_random_on_open
         # TODO: enum { NONE, NORMAL, SEQUENTIAL, WILLNEED } access_hint_on_compaction_start
         cpp_bool use_adaptive_mutex
diff --git a/rocksdb/table_factory.pxd b/rocksdb/table_factory.pxd
index cdb713f..f5292c1 100644
--- a/rocksdb/table_factory.pxd
+++ b/rocksdb/table_factory.pxd
@@ -18,6 +18,11 @@ cdef extern from "rocksdb/table.h" namespace "rocksdb":
         BlockBasedTableIndexType index_type
         cpp_bool hash_index_allow_collision
         ChecksumType checksum
+        cpp_bool no_block_cache
+        size_t block_size
+        int block_size_deviation
+        int block_restart_interval
+        cpp_bool whole_key_filtering
 
     cdef TableFactory* NewBlockBasedTableFactory(const BlockBasedTableOptions&)
 
-- 
GitLab