From 1fcf72776ad3364f785d41a35b8aae8f4046959b Mon Sep 17 00:00:00 2001 From: pmmiranda Date: Tue, 15 Jul 2025 22:02:58 +0100 Subject: [PATCH 1/2] Make nimbus beacon node accessible by threading. - Add a public entry point to nimbus beacon. - protect database file lock concurrent creation/deletion --- beacon_chain/nimbus_beacon_node.nim | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/beacon_chain/nimbus_beacon_node.nim b/beacon_chain/nimbus_beacon_node.nim index a7f663e5a1..13c37ca17b 100644 --- a/beacon_chain/nimbus_beacon_node.nim +++ b/beacon_chain/nimbus_beacon_node.nim @@ -8,7 +8,7 @@ {.push raises: [].} import - std/[os, random, terminal, times, exitprocs], + std/[os, random, terminal, times, exitprocs, atomics], chronos, chronicles, metrics, metrics/chronos_httpserver, stew/[byteutils, io2], @@ -2169,11 +2169,15 @@ proc run(node: BeaconNode) {.raises: [CatchableError].} = # time to say goodbye node.stop() +var shouldCreatePidFile*: Atomic[bool] +shouldCreatePidFile.store(true) + var gPidFile: string proc createPidFile(filename: string) {.raises: [IOError].} = - writeFile filename, $os.getCurrentProcessId() - gPidFile = filename - addExitProc proc {.noconv.} = discard io2.removeFile(gPidFile) + if shouldCreatePidFile.load(): + writeFile filename, $os.getCurrentProcessId() + gPidFile = filename + addExitProc proc {.noconv.} = discard io2.removeFile(gPidFile) proc initializeNetworking(node: BeaconNode) {.async.} = node.installMessageValidators() @@ -2538,7 +2542,7 @@ proc doSlashingInterchange(conf: BeaconNodeConf) {.raises: [CatchableError].} = of SlashProtCmd.`import`: conf.doSlashingImport() -proc handleStartUpCmd(config: var BeaconNodeConf) {.raises: [CatchableError].} = +proc handleStartUpCmd*(config: var BeaconNodeConf) {.raises: [CatchableError].} = # Single RNG instance for the application - will be seeded on construction # and avoid using system resources (such as urandom) after that let rng = HmacDrbgContext.new() From 857a1e4124079373a5726354054e0d9783374400 Mon Sep 17 00:00:00 2001 From: pmmiranda Date: Tue, 22 Jul 2025 01:58:38 +0100 Subject: [PATCH 2/2] Moved variables declaration to nimbus_binary_common --- beacon_chain/nimbus_beacon_node.nim | 3 --- beacon_chain/nimbus_binary_common.nim | 6 +++++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/beacon_chain/nimbus_beacon_node.nim b/beacon_chain/nimbus_beacon_node.nim index 13c37ca17b..18a4259096 100644 --- a/beacon_chain/nimbus_beacon_node.nim +++ b/beacon_chain/nimbus_beacon_node.nim @@ -2169,9 +2169,6 @@ proc run(node: BeaconNode) {.raises: [CatchableError].} = # time to say goodbye node.stop() -var shouldCreatePidFile*: Atomic[bool] -shouldCreatePidFile.store(true) - var gPidFile: string proc createPidFile(filename: string) {.raises: [IOError].} = if shouldCreatePidFile.load(): diff --git a/beacon_chain/nimbus_binary_common.nim b/beacon_chain/nimbus_binary_common.nim index 3cad5f7d6b..ce5fa39002 100644 --- a/beacon_chain/nimbus_binary_common.nim +++ b/beacon_chain/nimbus_binary_common.nim @@ -11,7 +11,7 @@ import # Standard library - std/[tables, strutils, terminal, typetraits], + std/[atomics, tables, strutils, terminal, typetraits], # Nimble packages chronos, confutils, presto, toml_serialization, metrics, @@ -41,6 +41,10 @@ type lastSlot: Slot): Future[bool] {.gcsafe, raises: [].} +# controls if beacon node db file lock should be created (default: true) +var shouldCreatePidFile*: Atomic[bool] +shouldCreatePidFile.store(true) + # silly chronicles, colors is a compile-time property when defaultChroniclesStream.outputs.type.arity == 2: func stripAnsi(v: string): string =