diff --git a/beacon_chain/beacon_chain_db.nim b/beacon_chain/beacon_chain_db.nim index a34efd597..4b8b69f3f 100644 --- a/beacon_chain/beacon_chain_db.nim +++ b/beacon_chain/beacon_chain_db.nim @@ -128,6 +128,9 @@ proc get[T](db: BeaconChainDB, key: openArray[byte], output: var T): GetResult = status +proc close*(db: BeaconChainDB) = + discard db.backend.close() + proc putBlock*(db: BeaconChainDB, value: SignedBeaconBlock) = db.put(subkey(type value, value.root), value) proc putBlock*(db: BeaconChainDB, value: TrustedSignedBeaconBlock) = diff --git a/beacon_chain/beacon_node.nim b/beacon_chain/beacon_node.nim index e69c3454d..95cd95f6b 100644 --- a/beacon_chain/beacon_node.nim +++ b/beacon_chain/beacon_node.nim @@ -796,6 +796,8 @@ proc stop*(node: BeaconNode) = if not node.config.inProcessValidators: node.vcProcess.close() waitFor node.network.stop() + node.db.close() + info "Database closed" proc run*(node: BeaconNode) = if status == BeaconNodeStatus.Starting: diff --git a/beacon_chain/validator_pool.nim b/beacon_chain/validator_pool.nim index a83978edd..b11b1b1ed 100644 --- a/beacon_chain/validator_pool.nim +++ b/beacon_chain/validator_pool.nim @@ -1,5 +1,5 @@ import - tables, strutils, json, streams, + tables, json, streams, chronos, chronicles, spec/[datatypes, crypto, digest, signatures, helpers], beacon_node_types, diff --git a/ncli/ncli_db.nim b/ncli/ncli_db.nim index 11d69cf4e..7642c1cfe 100644 --- a/ncli/ncli_db.nim +++ b/ncli/ncli_db.nim @@ -89,6 +89,7 @@ proc cmdBench(conf: DbConf, runtimePreset: RuntimePreset) = kvStore SqStoreRef.init(conf.databaseDir.string, "nbc").tryGet()) dbBenchmark = BeaconChainDB.init( kvStore SqStoreRef.init(".", "benchmark").tryGet()) + defer: db.close() if not ChainDAGRef.isInitialized(db): echo "Database not initialized" @@ -142,6 +143,7 @@ proc cmdDumpState(conf: DbConf) = let db = BeaconChainDB.init( kvStore SqStoreRef.init(conf.databaseDir.string, "nbc").tryGet()) + defer: db.close() for stateRoot in conf.stateRoot: try: @@ -158,6 +160,7 @@ proc cmdDumpBlock(conf: DbConf) = let db = BeaconChainDB.init( kvStore SqStoreRef.init(conf.databaseDir.string, "nbc").tryGet()) + defer: db.close() for blockRoot in conf.blockRootx: try: @@ -246,6 +249,10 @@ proc cmdPrune(conf: DbConf) = copyDb = BeaconChainDB.init( kvStore SqStoreRef.init(conf.databaseDir.string, "nbc_pruned").tryGet()) + defer: + db.close() + copyDb.close() + db.copyPrunedDatabase(copyDb, conf.dryRun, conf.verbose, conf.keepOldStates) proc cmdRewindState(conf: DbConf, runtimePreset: RuntimePreset) = @@ -253,6 +260,7 @@ proc cmdRewindState(conf: DbConf, runtimePreset: RuntimePreset) = let db = BeaconChainDB.init( kvStore SqStoreRef.init(conf.databaseDir.string, "nbc").tryGet()) + defer: db.close() if not ChainDAGRef.isInitialized(db): echo "Database not initialized" diff --git a/tests/test_beacon_chain_db.nim b/tests/test_beacon_chain_db.nim index a59645f01..15655197f 100644 --- a/tests/test_beacon_chain_db.nim +++ b/tests/test_beacon_chain_db.nim @@ -66,6 +66,8 @@ suiteReport "Beacon chain DB" & preset(): db.getStateRoot(root, signedBlock.message.slot).get() == root db.getStateRoot(root, signedBlock.message.slot + 1).get() == root2 + db.close() + wrappedTimedTest "sanity check states" & preset(): var db = init(BeaconChainDB, kvStore MemStoreRef.init()) @@ -80,6 +82,8 @@ suiteReport "Beacon chain DB" & preset(): db.containsState(root) hash_tree_root(db.getStateRef(root)[]) == root + db.close() + wrappedTimedTest "find ancestors" & preset(): var db = init(BeaconChainDB, kvStore MemStoreRef.init()) @@ -128,6 +132,7 @@ suiteReport "Beacon chain DB" & preset(): check db.containsState(root) let state2 = db.getStateRef(root) + db.close() check: hash_tree_root(state2[]) == root diff --git a/vendor/nim-eth b/vendor/nim-eth index c9caafb2a..ea0dbb256 160000 --- a/vendor/nim-eth +++ b/vendor/nim-eth @@ -1 +1 @@ -Subproject commit c9caafb2a4a0e69471bf1335188c54aad27536df +Subproject commit ea0dbb256e7f911a1ea39d8f53597c947923acae