From 01f13577ad0736dbaf435620db3cb9540b34fcb3 Mon Sep 17 00:00:00 2001 From: hofmockel <dreagonfly@gmx.de> Date: Sun, 30 Aug 2015 12:21:40 +0200 Subject: [PATCH] Add "row_cache" to options. --- rocksdb/_rocksdb.pyx | 17 +++++++++++++++++ rocksdb/options.pxd | 2 ++ rocksdb/tests/test_options.py | 6 ++++++ 3 files changed, 25 insertions(+) diff --git a/rocksdb/_rocksdb.pyx b/rocksdb/_rocksdb.pyx index c72e826..95422fc 100644 --- a/rocksdb/_rocksdb.pyx +++ b/rocksdb/_rocksdb.pyx @@ -708,6 +708,7 @@ cdef class Options(object): cdef PySliceTransform py_prefix_extractor cdef PyTableFactory py_table_factory cdef PyMemtableFactory py_memtable_factory + cdef PyCache py_row_cache # Used to protect sharing of Options with many DB-objects cdef cpp_bool in_use @@ -727,6 +728,7 @@ cdef class Options(object): self.py_prefix_extractor = None self.py_table_factory = None self.py_memtable_factory = None + self.py_row_cache = None for key, value in kwargs.items(): setattr(self, key, value) @@ -1210,6 +1212,21 @@ cdef class Options(object): self.py_prefix_extractor = PySliceTransform(value) self.opts.prefix_extractor = self.py_prefix_extractor.get_transformer() + property row_cache: + def __get__(self): + return self.py_row_cache + + def __set__(self, value): + if value is None: + self.py_row_cache = None + self.opts.row_cache.reset() + elif not isinstance(value, PyCache): + raise Exception("row_cache must be a Cache object") + else: + self.py_row_cache = value + self.opts.row_cache = self.py_row_cache.get_cache() + + # Forward declaration cdef class Snapshot diff --git a/rocksdb/options.pxd b/rocksdb/options.pxd index ea1daaf..aa404d1 100644 --- a/rocksdb/options.pxd +++ b/rocksdb/options.pxd @@ -13,6 +13,7 @@ from slice_transform cimport SliceTransform from table_factory cimport TableFactory from memtablerep cimport MemTableRepFactory from universal_compaction cimport CompactionOptionsUniversal +from cache cimport Cache cdef extern from "rocksdb/options.h" namespace "rocksdb": ctypedef enum CompactionStyle: @@ -105,6 +106,7 @@ cdef extern from "rocksdb/options.h" namespace "rocksdb": # TODO: table_properties_collectors cpp_bool inplace_update_support size_t inplace_update_num_locks + shared_ptr[Cache] row_cache cdef cppclass WriteOptions: cpp_bool sync diff --git a/rocksdb/tests/test_options.py b/rocksdb/tests/test_options.py index ce2ae52..0f2c6d8 100644 --- a/rocksdb/tests/test_options.py +++ b/rocksdb/tests/test_options.py @@ -96,3 +96,9 @@ class TestOptions(unittest.TestCase): self.assertEqual(1, uopts['size_ratio']) self.assertEqual(2, uopts['min_merge_width']) self.assertEqual(30, uopts['max_merge_width']) + + def test_row_cache(self): + opts = rocksdb.Options() + self.assertIsNone(opts.row_cache) + opts.row_cache = cache = rocksdb.LRUCache(2*1024*1024) + self.assertEqual(cache, opts.row_cache) -- GitLab