Skip to content

Commit

Permalink
Remove rocks_db import from persist() function
Browse files Browse the repository at this point in the history
why:
  Some systems (i.p `fluffy` and friends) use the `Aristo` memory
  backend emulation and do not link against rocksdb when building the
  application. So this should fix that problem.
  • Loading branch information
mjfh committed Jun 13, 2024
1 parent c63783b commit bbc6256
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 16 deletions.
2 changes: 1 addition & 1 deletion nimbus/db/kvt/kvt_desc.nim
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ type
centre: KvtDbRef ## Link to peer with write permission
peers: HashSet[KvtDbRef] ## List of all peers

KvtDbRef* = ref object
KvtDbRef* = ref object of RootRef
## Three tier database object supporting distributed instances.
top*: LayerRef ## Database working layer, mutable
stack*: seq[LayerRef] ## Stashed immutable parent layers
Expand Down
11 changes: 11 additions & 0 deletions nimbus/db/kvt/kvt_desc/desc_backend.nim
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,15 @@ type
## `KVT` descriptors being modified (e.g. by `reCentre()`) or by
## adding/removing a new peer (e.g. by `fork()` or `forget()`.)

SetWrReqFn* =
proc(db: RootRef): Result[void,KvtError] {.gcsafe, raises: [].}
## This function stores a request function for the piggiback mode
## writing to the `Aristo` set of column families.
##
## If used at all, this function would run `rocks_db.setWrReqTriggeredFn()()`
## with a `KvtDbRef` type argument for `db`. This allows to run the `Kvt`
## without linking to the rocksdb interface unless it is really needed.

# -------------

BackendRef* = ref BackendObj
Expand All @@ -74,6 +83,8 @@ type
closeFn*: CloseFn ## Generic destructor
canModFn*: CanModFn ## Lock-alike

setWrReqFn*: SetWrReqFn ## Register main descr for write request

proc init*(trg: var BackendObj; src: BackendObj) =
trg.getKvpFn = src.getKvpFn
trg.putBegFn = src.putBegFn
Expand Down
1 change: 1 addition & 0 deletions nimbus/db/kvt/kvt_desc/desc_error.nim
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ type
RdbBeDriverPutError
RdbBeDriverWriteError
RdbBeHostError
RdbBeHostNotApplicable

# Transaction wrappers
TxArgStaleTx
Expand Down
7 changes: 6 additions & 1 deletion nimbus/db/kvt/kvt_init/memory_db.nim
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,11 @@ proc canModFn(db: MemBackendRef): CanModFn =
proc(): Result[void,KvtError] =
ok()

proc setWrReqFn(db: MemBackendRef): SetWrReqFn =
result =
proc(kvt: RootRef): Result[void,KvtError] =
err(RdbBeHostNotApplicable)

# ------------------------------------------------------------------------------
# Public functions
# ------------------------------------------------------------------------------
Expand All @@ -142,7 +147,7 @@ proc memoryBackend*: BackendRef =

db.closeFn = closeFn db
db.canModFn = canModFn db

db.setWrReqFn = setWrReqFn db
db

proc dup*(db: MemBackendRef): MemBackendRef =
Expand Down
28 changes: 16 additions & 12 deletions nimbus/db/kvt/kvt_init/rocks_db.nim
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,11 @@ proc canModFn(db: RdbBackendRef): CanModFn =
proc(): Result[void,KvtError] =
ok()

proc setWrReqFn(db: RdbBackendRef): SetWrReqFn =
result =
proc(kvt: RootRef): Result[void,KvtError] =
err(RdbBeHostNotApplicable)

# ------------------------------------------------------------------------------
# Private functions: triggered interface changes
# ------------------------------------------------------------------------------
Expand Down Expand Up @@ -194,6 +199,15 @@ proc canModTriggeredFn(db: RdbBackendRef): CanModFn =
return err(RdbBeDelayedLocked)
ok()

proc setWrReqTriggeredFn(db: RdbBackendRef): SetWrReqFn =
result =
proc(kvt: RootRef): Result[void,KvtError] =
if db.rdb.delayedPersist.isNil:
db.rdb.delayedPersist = KvtDbRef(kvt)
ok()
else:
err(RdbBeDelayedAlreadyRegistered)

# ------------------------------------------------------------------------------
# Private function: trigger handler
# ------------------------------------------------------------------------------
Expand Down Expand Up @@ -260,6 +274,7 @@ proc rocksDbKvtBackend*(

db.closeFn = closeFn db
db.canModFn = canModFn db
db.setWrReqFn = setWrReqFn db
ok db


Expand Down Expand Up @@ -288,21 +303,10 @@ proc rocksDbKvtTriggeredBackend*(

db.closeFn = closeTriggeredFn db
db.canModFn = canModTriggeredFn db
db.setWrReqFn = setWrReqTriggeredFn db
ok db


proc setDelayedPersist*(
be: BackendRef;
kvt: KvtDbRef;
): Result[void,KvtError] =
let db = RdbBackendRef(be)
if db.rdb.delayedPersist.isNil:
db.rdb.delayedPersist = kvt
ok()
else:
err(RdbBeDelayedAlreadyRegistered)


proc dup*(db: RdbBackendRef): RdbBackendRef =
new result
init_common.init(result[], db[])
Expand Down
4 changes: 2 additions & 2 deletions nimbus/db/kvt/kvt_tx.nim
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import
results,
./kvt_tx/[tx_fork, tx_frame, tx_stow],
./kvt_init/[memory_only, rocks_db],
./kvt_init/memory_only,
./kvt_desc

# ------------------------------------------------------------------------------
Expand Down Expand Up @@ -181,7 +181,7 @@ proc persist*(
# Register for saving if piggybacked on remote database
if db.backend.kind == BackendRdbTriggered:
? db.txStowOk(persistent=true)
? db.backend.setDelayedPersist db
? db.backend.setWrReqFn db
return err(TxPersistDelayed)

db.txStow(persistent=true)
Expand Down

0 comments on commit bbc6256

Please sign in to comment.