Skip to content

Commit

Permalink
feat: implement ability to open as secondary db (#2)
Browse files Browse the repository at this point in the history
  • Loading branch information
glevco authored Oct 3, 2024
1 parent 72edcfb commit bf20fa8
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 1 deletion.
20 changes: 19 additions & 1 deletion rocksdb/_rocksdb.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -1442,9 +1442,10 @@ cdef class DB(object):
cdef list cf_handles
cdef list cf_options

def __cinit__(self, db_name, Options opts, dict column_families=None, read_only=False):
def __cinit__(self, db_name, Options opts, dict column_families=None, read_only=False, secondary_path=None):
cdef Status st
cdef string db_path
cdef string c_secondary_path
cdef vector[db.ColumnFamilyDescriptor] column_family_descriptors
cdef vector[db.ColumnFamilyHandle*] column_family_handles
cdef bytes default_cf_name = db.kDefaultColumnFamilyName
Expand Down Expand Up @@ -1491,6 +1492,7 @@ cdef class DB(object):
)
self.cf_options.append(cf_options)
if read_only:
assert secondary_path is None
with nogil:
st = db.DB_OpenForReadOnly_ColumnFamilies(
deref(opts.opts),
Expand All @@ -1499,6 +1501,16 @@ cdef class DB(object):
&column_family_handles,
&self.db,
False)
elif secondary_path:
c_secondary_path = path_to_string(secondary_path)
with nogil:
st = db.DB_OpenAsSecondary_ColumnFamilies(
deref(opts.opts),
db_path,
c_secondary_path,
column_family_descriptors,
&column_family_handles,
&self.db)
else:
with nogil:
st = db.DB_Open_ColumnFamilies(
Expand Down Expand Up @@ -2081,6 +2093,12 @@ cdef class DB(object):
if copts:
copts.in_use = False

def try_catch_up_with_primary(self):
cdef Status st
with nogil:
st = self.db.TryCatchUpWithPrimary()
check_status(st)


def repair_db(db_name, Options opts):
cdef Status st
Expand Down
15 changes: 15 additions & 0 deletions rocksdb/db.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@ cdef extern from "rocksdb/db.h" namespace "rocksdb":
void GetLiveFilesMetaData(vector[LiveFileMetaData]*) nogil except+
void GetColumnFamilyMetaData(ColumnFamilyHandle*, ColumnFamilyMetaData*) nogil except+
ColumnFamilyHandle* DefaultColumnFamily()
Status TryCatchUpWithPrimary() nogil except+


cdef Status DB_Open "rocksdb::DB::Open"(
Expand All @@ -195,6 +196,20 @@ cdef extern from "rocksdb/db.h" namespace "rocksdb":
vector[ColumnFamilyHandle*]*,
DB**) nogil except+

cdef Status DB_OpenAsSecondary "rocksdb::DB::OpenAsSecondary"(
const options.Options&,
const string&,
const string&,
DB**) nogil except+

cdef Status DB_OpenAsSecondary_ColumnFamilies "rocksdb::DB::OpenAsSecondary"(
const options.Options&,
const string&,
const string&,
const vector[ColumnFamilyDescriptor]&,
vector[ColumnFamilyHandle*]*,
DB**) nogil except+

cdef Status DB_OpenForReadOnly "rocksdb::DB::OpenForReadOnly"(
const options.Options&,
const string&,
Expand Down

0 comments on commit bf20fa8

Please sign in to comment.