Skip to content

update WriteOptions to WriteOptions.low_pri version #25

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 26 additions & 4 deletions docs/api/database.rst
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Database object
Exception.


.. py:method:: put(key, value, sync=False, disable_wal=False)
.. py:method:: put(key, value, sync=False, disable_wal=False, ignore_missing_column_families=False, no_slowdown=False, low_pri=False)

Set the database entry for "key" to "value".

Expand All @@ -42,16 +42,35 @@ Database object
If ``True``, writes will not first go to the write ahead log,
and the write may got lost after a crash.

.. py:method:: delete(key, sync=False, disable_wal=False)
:param bool ignore_missing_column_families:
If ``True`` and if user is trying to write to column families that don't exist
(they were dropped), ignore the write (don't return an error). If there
are multiple writes in a WriteBatch, other writes will succeed.

:param bool no_slowdown:
If ``True`` and we need to wait or sleep for the write request, fails
immediately with Status::Incomplete().

:param bool low_pri:
If ``True``, this write request is of lower priority if compaction is
behind. In this case, no_slowdown = true, the request will be cancelled
immediately with Status::Incomplete() returned. Otherwise, it will be
slowed down. The slowdown value is determined by RocksDB to guarantee
it introduces minimum impacts to high priority writes.

.. py:method:: delete(key, sync=False, disable_wal=False, ignore_missing_column_families=False, no_slowdown=False, low_pri=False)

Remove the database entry for "key".

:param bytes key: Name to delete
:param sync: See :py:meth:`rocksdb.DB.put`
:param disable_wal: See :py:meth:`rocksdb.DB.put`
:param ignore_missing_column_families: See :py:meth:`rocksdb.DB.put`
:param no_slowdown: See :py:meth:`rocksdb.DB.put`
:param low_pri: See :py:meth:`rocksdb.DB.put`
:raises rocksdb.errors.NotFound: If the key did not exists

.. py:method:: merge(key, value, sync=False, disable_wal=False)
.. py:method:: merge(key, value, sync=False, disable_wal=False, ignore_missing_column_families=False, no_slowdown=False, low_pri=False)

Merge the database entry for "key" with "value".
The semantics of this operation is determined by the user provided
Expand All @@ -64,13 +83,16 @@ Database object
no :py:attr:`rocksdb.Options.merge_operator` was set at creation


.. py:method:: write(batch, sync=False, disable_wal=False)
.. py:method:: write(batch, sync=False, disable_wal=False, ignore_missing_column_families=False, no_slowdown=False, low_pri=False)

Apply the specified updates to the database.

:param rocksdb.WriteBatch batch: Batch to apply
:param sync: See :py:meth:`rocksdb.DB.put`
:param disable_wal: See :py:meth:`rocksdb.DB.put`
:param ignore_missing_column_families: See :py:meth:`rocksdb.DB.put`
:param no_slowdown: See :py:meth:`rocksdb.DB.put`
:param low_pri: See :py:meth:`rocksdb.DB.put`

.. py:method:: get(key, verify_checksums=False, fill_cache=True, snapshot=None, read_tier="all")

Expand Down
20 changes: 16 additions & 4 deletions rocksdb/_rocksdb.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -1458,11 +1458,14 @@ cdef class DB(object):
if self.opts is not None:
self.opts.in_use = False

def put(self, key, value, sync=False, disable_wal=False):
def put(self, key, value, sync=False, disable_wal=False, ignore_missing_column_families=False, no_slowdown=False, low_pri=False):
cdef Status st
cdef options.WriteOptions opts
opts.sync = sync
opts.disableWAL = disable_wal
opts.ignore_missing_column_families = ignore_missing_column_families
opts.no_slowdown = no_slowdown
opts.low_pri = low_pri

cdef Slice c_key = bytes_to_slice(key)
cdef Slice c_value = bytes_to_slice(value)
Expand All @@ -1471,34 +1474,43 @@ cdef class DB(object):
st = self.db.Put(opts, c_key, c_value)
check_status(st)

def delete(self, key, sync=False, disable_wal=False):
def delete(self, key, sync=False, disable_wal=False, ignore_missing_column_families=False, no_slowdown=False, low_pri=False):
cdef Status st
cdef options.WriteOptions opts
opts.sync = sync
opts.disableWAL = disable_wal
opts.ignore_missing_column_families = ignore_missing_column_families
opts.no_slowdown = no_slowdown
opts.low_pri = low_pri

cdef Slice c_key = bytes_to_slice(key)
with nogil:
st = self.db.Delete(opts, c_key)
check_status(st)

def merge(self, key, value, sync=False, disable_wal=False):
def merge(self, key, value, sync=False, disable_wal=False, ignore_missing_column_families=False, no_slowdown=False, low_pri=False):
cdef Status st
cdef options.WriteOptions opts
opts.sync = sync
opts.disableWAL = disable_wal
opts.ignore_missing_column_families = ignore_missing_column_families
opts.no_slowdown = no_slowdown
opts.low_pri = low_pri

cdef Slice c_key = bytes_to_slice(key)
cdef Slice c_value = bytes_to_slice(value)
with nogil:
st = self.db.Merge(opts, c_key, c_value)
check_status(st)

def write(self, WriteBatch batch, sync=False, disable_wal=False):
def write(self, WriteBatch batch, sync=False, disable_wal=False, ignore_missing_column_families=False, no_slowdown=False, low_pri=False):
cdef Status st
cdef options.WriteOptions opts
opts.sync = sync
opts.disableWAL = disable_wal
opts.ignore_missing_column_families = ignore_missing_column_families
opts.no_slowdown = no_slowdown
opts.low_pri = low_pri

with nogil:
st = self.db.Write(opts, batch.batch)
Expand Down
3 changes: 3 additions & 0 deletions rocksdb/options.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,9 @@ cdef extern from "rocksdb/options.h" namespace "rocksdb":
cdef cppclass WriteOptions:
cpp_bool sync
cpp_bool disableWAL
cpp_bool ignore_missing_column_families
cpp_bool no_slowdown
cpp_bool low_pri

cdef cppclass ReadOptions:
cpp_bool verify_checksums
Expand Down
8 changes: 8 additions & 0 deletions rocksdb/tests/test_db.py
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,14 @@ def test_compact_range(self):

self.db.compact_range()

def test_write_ignore_missing_column_families(self):
self.db.put(b"a", b"1", ignore_missing_column_families=True)

def test_write_no_slowdown(self):
self.db.put(b"a", b"1", no_slowdown=True)

def test_write_low_pri(self):
self.db.put(b"a", b"1", low_pri=True)

class AssocCounter(rocksdb.interfaces.AssociativeMergeOperator):
def merge(self, key, existing_value, value):
Expand Down