Skip to content

Commit bf20fa8

Browse files
authored
feat: implement ability to open as secondary db (NightTsarina#2)
1 parent 72edcfb commit bf20fa8

2 files changed

Lines changed: 34 additions & 1 deletion

File tree

rocksdb/_rocksdb.pyx

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1442,9 +1442,10 @@ cdef class DB(object):
14421442
cdef list cf_handles
14431443
cdef list cf_options
14441444

1445-
def __cinit__(self, db_name, Options opts, dict column_families=None, read_only=False):
1445+
def __cinit__(self, db_name, Options opts, dict column_families=None, read_only=False, secondary_path=None):
14461446
cdef Status st
14471447
cdef string db_path
1448+
cdef string c_secondary_path
14481449
cdef vector[db.ColumnFamilyDescriptor] column_family_descriptors
14491450
cdef vector[db.ColumnFamilyHandle*] column_family_handles
14501451
cdef bytes default_cf_name = db.kDefaultColumnFamilyName
@@ -1491,6 +1492,7 @@ cdef class DB(object):
14911492
)
14921493
self.cf_options.append(cf_options)
14931494
if read_only:
1495+
assert secondary_path is None
14941496
with nogil:
14951497
st = db.DB_OpenForReadOnly_ColumnFamilies(
14961498
deref(opts.opts),
@@ -1499,6 +1501,16 @@ cdef class DB(object):
14991501
&column_family_handles,
15001502
&self.db,
15011503
False)
1504+
elif secondary_path:
1505+
c_secondary_path = path_to_string(secondary_path)
1506+
with nogil:
1507+
st = db.DB_OpenAsSecondary_ColumnFamilies(
1508+
deref(opts.opts),
1509+
db_path,
1510+
c_secondary_path,
1511+
column_family_descriptors,
1512+
&column_family_handles,
1513+
&self.db)
15021514
else:
15031515
with nogil:
15041516
st = db.DB_Open_ColumnFamilies(
@@ -2081,6 +2093,12 @@ cdef class DB(object):
20812093
if copts:
20822094
copts.in_use = False
20832095

2096+
def try_catch_up_with_primary(self):
2097+
cdef Status st
2098+
with nogil:
2099+
st = self.db.TryCatchUpWithPrimary()
2100+
check_status(st)
2101+
20842102

20852103
def repair_db(db_name, Options opts):
20862104
cdef Status st

rocksdb/db.pxd

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ cdef extern from "rocksdb/db.h" namespace "rocksdb":
181181
void GetLiveFilesMetaData(vector[LiveFileMetaData]*) nogil except+
182182
void GetColumnFamilyMetaData(ColumnFamilyHandle*, ColumnFamilyMetaData*) nogil except+
183183
ColumnFamilyHandle* DefaultColumnFamily()
184+
Status TryCatchUpWithPrimary() nogil except+
184185

185186

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

199+
cdef Status DB_OpenAsSecondary "rocksdb::DB::OpenAsSecondary"(
200+
const options.Options&,
201+
const string&,
202+
const string&,
203+
DB**) nogil except+
204+
205+
cdef Status DB_OpenAsSecondary_ColumnFamilies "rocksdb::DB::OpenAsSecondary"(
206+
const options.Options&,
207+
const string&,
208+
const string&,
209+
const vector[ColumnFamilyDescriptor]&,
210+
vector[ColumnFamilyHandle*]*,
211+
DB**) nogil except+
212+
198213
cdef Status DB_OpenForReadOnly "rocksdb::DB::OpenForReadOnly"(
199214
const options.Options&,
200215
const string&,

0 commit comments

Comments
 (0)