aristo: remove replicate (#2758)

Not used, not tested, mostly obsolete due to how key table has become a
cache
This commit is contained in:
Jacek Sieka 2024-10-20 17:25:12 +02:00 committed by GitHub
parent 2decb618c8
commit 503dcd40c4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 40 additions and 188 deletions

View File

@ -54,14 +54,6 @@ iterator walkPairs*[T: MemBackendRef|VoidBackendRef](
for (rvid,vtx) in walkPairsImpl[T](db):
yield (rvid,vtx)
iterator replicate*[T: MemBackendRef|VoidBackendRef](
_: type T;
db: AristoDbRef;
): tuple[rvid: RootedVertexID, key: HashKey, vtx: VertexRef, node: NodeRef] =
## Variant of `walkPairsImpl()` for legacy applications.
for (rvid,key,vtx,node) in replicateImpl[T](db):
yield (rvid,key,vtx,node)
# ------------------------------------------------------------------------------
# End
# ------------------------------------------------------------------------------

View File

@ -59,14 +59,6 @@ iterator walkPairs*[T: RdbBackendRef](
for (rvid,vtx) in walkPairsImpl[T](db):
yield (rvid,vtx)
iterator replicate*[T: RdbBackendRef](
_: type T;
db: AristoDbRef;
): tuple[rvid: RootedVertexID, key: HashKey, vtx: VertexRef, node: NodeRef] =
## Variant of `walkPairsImpl()` for legacy applications.
for (rvid,key,vtx,node) in replicateImpl[T](db):
yield (rvid,key,vtx,node)
# ------------------------------------------------------------------------------
# End
# ------------------------------------------------------------------------------

View File

@ -90,19 +90,6 @@ iterator walkPairsImpl*[T](
if rvid.vid notin seen:
yield (rvid,vtx)
iterator replicateImpl*[T](
db: AristoDbRef; # Database with top layer & backend filter
): tuple[rvid: RootedVertexID, key: HashKey, vtx: VertexRef, node: NodeRef] =
## Variant of `walkPairsImpl()` for legacy applications.
for (rvid,vtx) in walkPairsImpl[T](db):
let node = block:
let rc = vtx.toNode(rvid.root, db)
if rc.isOk:
rc.value
else:
NodeRef(nil)
yield (rvid, db.getKey rvid, vtx, node)
# ------------------------------------------------------------------------------
# End
# ------------------------------------------------------------------------------

View File

@ -1,74 +0,0 @@
# Nimbus
# Copyright (c) 2023-2024 Status Research & Development GmbH
# Licensed under either of
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
# http://www.apache.org/licenses/LICENSE-2.0)
# * MIT license ([LICENSE-MIT](LICENSE-MIT) or
# http://opensource.org/licenses/MIT)
# at your option. This file may not be copied, modified, or distributed except
# according to those terms.
## Generic iterator, prototype to be included (rather than imported). Using
## an include file avoids duplicating code because the `T` argument is not
## bound to any object type. Otherwise all object types would be required
## when providing this iterator for import.
##
## This is not wanted here, because the import of a **pesistent** object
## would always require extra linking.
template valueOrApiError[U,V](rc: Result[U,V]; info: static[string]): U =
rc.valueOr: raise (ref CoreDbApiError)(msg: info)
template dbType(dsc: CoreDbKvtRef | CoreDbMptRef | CoreDbAccRef): CoreDbType =
dsc.distinctBase.parent.dbType
# ---------------
template kvt(dsc: CoreDbKvtRef): KvtDbRef =
dsc.distinctBase.kvt
template call(api: KvtApiRef; fn: untyped; args: varArgs[untyped]): untyped =
when CoreDbEnableApiJumpTable:
api.fn(args)
else:
fn(args)
template call(kvt: CoreDbKvtRef; fn: untyped; args: varArgs[untyped]): untyped =
kvt.distinctBase.parent.kvtApi.call(fn, args)
# ---------------
template mpt(dsc: CoreDbAccRef | CoreDbMptRef): AristoDbRef =
dsc.distinctBase.mpt
template call(api: AristoApiRef; fn: untyped; args: varArgs[untyped]): untyped =
when CoreDbEnableApiJumpTable:
api.fn(args)
else:
fn(args)
template call(
acc: CoreDbAccRef | CoreDbMptRef;
fn: untyped;
args: varArgs[untyped];
): untyped =
acc.distinctBase.parent.ariApi.call(fn, args)
# ---------------
iterator aristoReplicate[T](
mpt: CoreDbMptRef;
): (seq[byte],seq[byte])
{.gcsafe, raises: [CoreDbApiError].} =
## Generic iterator used for building dedicated backend iterators.
##
let p = mpt.call(forkTx, mpt.mpt, 0).valueOrApiError "aristoReplicate()"
defer: discard mpt.call(forget, p)
for (rVid,key,vtx,node) in T.replicate(p):
let w = node.to(seq[seq[byte]])
yield (@(key.data),w[0])
if 1 < w.len:
# Was an extension merged into a branch
yield (@(w[1].digestTo(HashKey).data),w[1])
# End

View File

@ -87,7 +87,6 @@ type
MptMergeFn = "mpt/merge"
MptProofFn = "mpt/proof"
MptPairsIt = "mpt/pairs"
MptReplicateIt = "mpt/replicate"
MptStateFn = "mpt/state"
TxCommitFn = "commit"

View File

@ -15,7 +15,6 @@ import
eth/common,
../../errors,
../aristo as use_ari,
../aristo/[aristo_walk, aristo_serialise],
../kvt as use_kvt,
../kvt/[kvt_init/memory_only, kvt_walk],
./base/[api_tracking, base_config, base_desc]
@ -24,12 +23,9 @@ when CoreDbEnableApiJumpTable:
discard
else:
import
../aristo/[aristo_desc, aristo_path, aristo_tx],
../aristo/[aristo_desc, aristo_path],
../kvt/[kvt_desc, kvt_tx]
include
./backend/aristo_replicate
when CoreDbEnableApiTracking:
import
chronicles
@ -41,6 +37,44 @@ when CoreDbEnableApiTracking:
# Annotation helper(s)
{.pragma: apiRaise, gcsafe, raises: [CoreDbApiError].}
template valueOrApiError[U,V](rc: Result[U,V]; info: static[string]): U =
rc.valueOr: raise (ref CoreDbApiError)(msg: info)
template dbType(dsc: CoreDbKvtRef | CoreDbMptRef | CoreDbAccRef): CoreDbType =
dsc.distinctBase.parent.dbType
# ---------------
template kvt(dsc: CoreDbKvtRef): KvtDbRef =
dsc.distinctBase.kvt
template call(api: KvtApiRef; fn: untyped; args: varArgs[untyped]): untyped =
when CoreDbEnableApiJumpTable:
api.fn(args)
else:
fn(args)
template call(kvt: CoreDbKvtRef; fn: untyped; args: varArgs[untyped]): untyped =
kvt.distinctBase.parent.kvtApi.call(fn, args)
# ---------------
template mpt(dsc: CoreDbAccRef | CoreDbMptRef): AristoDbRef =
dsc.distinctBase.mpt
template call(api: AristoApiRef; fn: untyped; args: varArgs[untyped]): untyped =
when CoreDbEnableApiJumpTable:
api.fn(args)
else:
fn(args)
template call(
acc: CoreDbAccRef | CoreDbMptRef;
fn: untyped;
args: varArgs[untyped];
): untyped =
acc.distinctBase.parent.ariApi.call(fn, args)
# ------------------------------------------------------------------------------
# Public iterators
# ------------------------------------------------------------------------------
@ -89,21 +123,6 @@ iterator slotPairs*(acc: CoreDbAccRef; accPath: Hash32): (seq[byte], UInt256) =
acc.ifTrackNewApi:
debug logTxt, api, elapsed
iterator replicate*(mpt: CoreDbMptRef): (seq[byte], seq[byte]) {.apiRaise.} =
## Low level trie dump, only supported for non persistent `CoreDbMptRef`
##
mpt.setTrackNewApi MptReplicateIt
case mpt.dbType:
of AristoDbMemory:
for k,v in aristoReplicate[use_ari.MemBackendRef](mpt):
yield (k,v)
of AristoDbVoid:
for k,v in aristoReplicate[use_ari.VoidBackendRef](mpt):
yield (k,v)
of Ooops, AristoDbRocks:
raiseAssert: "Unsupported database type: " & $mpt.dbType
mpt.ifTrackNewApi: debug logTxt, api, elapsed
# ------------------------------------------------------------------------------
# End
# ------------------------------------------------------------------------------

View File

@ -1,61 +0,0 @@
# Nimbus
# Copyright (c) 2024 Status Research & Development GmbH
# Licensed under either of
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
# http://www.apache.org/licenses/LICENSE-2.0)
# * MIT license ([LICENSE-MIT](LICENSE-MIT) or
# http://opensource.org/licenses/MIT)
# at your option. This file may not be copied, modified, or distributed
# except according to those terms.
{.push raises: [].}
import
std/typetraits,
eth/common,
../../errors,
../aristo as use_ari,
../aristo/aristo_init/rocks_db,
../aristo/[aristo_desc, aristo_walk/persistent, aristo_serialise, aristo_tx],
../kvt, # needed for `aristo_replicate`
./base/[api_tracking, base_config, base_desc], ./base
include
./backend/aristo_replicate
when CoreDbEnableApiTracking:
import
chronicles
logScope:
topics = "core_db"
const
logTxt = "API"
# Annotation helper(s)
{.pragma: rlpRaise, gcsafe, raises: [CoreDbApiError].}
# ------------------------------------------------------------------------------
# Public iterators
# ------------------------------------------------------------------------------
iterator replicatePersistent*(mpt: CoreDbMptRef): (seq[byte], seq[byte]) {.rlpRaise.} =
## Extended version of `replicate()` for `Aristo` persistent backend.
##
mpt.setTrackNewApi MptReplicateIt
case mpt.dbType:
of AristoDbMemory:
for k,v in aristoReplicate[use_ari.MemBackendRef](mpt):
yield (k,v)
of AristoDbVoid:
for k,v in aristoReplicate[use_ari.VoidBackendRef](mpt):
yield (k,v)
of AristoDbRocks:
for k, v in aristoReplicate[rocks_db.RdbBackendRef](mpt):
yield (k, v)
else:
raiseAssert: "Unsupported database type: " & $mpt.dbType
mpt.ifTrackNewApi: debug logTxt, api, elapsed
# ------------------------------------------------------------------------------
# End
# ------------------------------------------------------------------------------

View File

@ -24,13 +24,11 @@
import
../aristo,
./memory_only,
base_iterators_persistent,
./backend/aristo_rocksdb,
../opts
export
memory_only,
base_iterators_persistent
memory_only
proc newCoreDbRef*(
dbType: static[CoreDbType]; # Database type symbol