From 012d719722342165a006e39bfe3228ddf3350e2f Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Thu, 10 Jul 2025 19:49:47 +0300 Subject: [PATCH] chore: cleaning waitFor instances (#3495) --- .../liteprotocoltester/liteprotocoltester.nim | 2 +- apps/wakunode2/wakunode2.nim | 2 +- examples/filter_subscriber.nim | 2 +- examples/wakustealthcommitments/node_spec.nim | 2 +- .../requests/node_lifecycle_request.nim | 2 +- tests/factory/test_node_factory.nim | 20 ++++++------ tests/waku_discv5/test_waku_discv5.nim | 10 +++--- tests/wakunode2/test_app.nim | 8 ++--- waku/factory/internal_config.nim | 4 +-- waku/factory/node_factory.nim | 20 ++++++------ waku/factory/waku.nim | 32 +++++++++++-------- waku/node/waku_metrics.nim | 12 ++++--- waku/node/waku_node.nim | 2 +- 13 files changed, 64 insertions(+), 54 deletions(-) diff --git a/apps/liteprotocoltester/liteprotocoltester.nim b/apps/liteprotocoltester/liteprotocoltester.nim index 939332cff..d528efa90 100644 --- a/apps/liteprotocoltester/liteprotocoltester.nim +++ b/apps/liteprotocoltester/liteprotocoltester.nim @@ -122,7 +122,7 @@ when isMainModule: error "Issue converting toWakuConf", error = $error quit(QuitFailure) - var waku = Waku.new(wakuConf).valueOr: + var waku = (waitFor Waku.new(wakuConf)).valueOr: error "Waku initialization failed", error = error quit(QuitFailure) diff --git a/apps/wakunode2/wakunode2.nim b/apps/wakunode2/wakunode2.nim index 5e6cbb700..54ecb1c43 100644 --- a/apps/wakunode2/wakunode2.nim +++ b/apps/wakunode2/wakunode2.nim @@ -56,7 +56,7 @@ when isMainModule: error "Waku configuration failed", error = error quit(QuitFailure) - var waku = Waku.new(conf).valueOr: + var waku = (waitFor Waku.new(conf)).valueOr: error "Waku initialization failed", error = error quit(QuitFailure) diff --git a/examples/filter_subscriber.nim b/examples/filter_subscriber.nim index 5554966d4..af40d21c3 100644 --- a/examples/filter_subscriber.nim +++ b/examples/filter_subscriber.nim @@ -77,7 +77,7 @@ proc setupAndSubscribe(rng: ref HmacDrbgContext) {.async.} = let node = builder.build().tryGet() node.mountMetadata(clusterId).expect("failed to mount waku metadata protocol") - waitFor node.mountFilterClient() + await node.mountFilterClient() await node.start() diff --git a/examples/wakustealthcommitments/node_spec.nim b/examples/wakustealthcommitments/node_spec.nim index c3468ccde..1af949314 100644 --- a/examples/wakustealthcommitments/node_spec.nim +++ b/examples/wakustealthcommitments/node_spec.nim @@ -46,7 +46,7 @@ proc setup*(): Waku = conf.rlnRelay = twnNetworkConf.rlnRelay debug "Starting node" - var waku = Waku.new(conf).valueOr: + var waku = (waitFor Waku.new(conf)).valueOr: error "Waku initialization failed", error = error quit(QuitFailure) diff --git a/library/waku_thread_requests/requests/node_lifecycle_request.nim b/library/waku_thread_requests/requests/node_lifecycle_request.nim index 21765838e..6bc613406 100644 --- a/library/waku_thread_requests/requests/node_lifecycle_request.nim +++ b/library/waku_thread_requests/requests/node_lifecycle_request.nim @@ -79,7 +79,7 @@ proc createWaku( wakuConf.restServerConf = none(RestServerConf) ## don't want REST in libwaku - let wakuRes = Waku.new(wakuConf, appCallbacks).valueOr: + let wakuRes = (await Waku.new(wakuConf, appCallbacks)).valueOr: error "waku initialization failed", error = error return err("Failed setting up Waku: " & $error) diff --git a/tests/factory/test_node_factory.nim b/tests/factory/test_node_factory.nim index f3d11b1a2..08149db08 100644 --- a/tests/factory/test_node_factory.nim +++ b/tests/factory/test_node_factory.nim @@ -9,10 +9,10 @@ import waku/factory/conf_builder/conf_builder suite "Node Factory": - test "Set up a node based on default configurations": + asynctest "Set up a node based on default configurations": let conf = defaultTestWakuConf() - let node = setupNode(conf, relay = Relay.new()).valueOr: + let node = (await setupNode(conf, relay = Relay.new())).valueOr: raiseAssert error check: @@ -23,13 +23,13 @@ suite "Node Factory": not node.wakuStoreClient.isNil() not node.wakuRendezvous.isNil() - test "Set up a node with Store enabled": + asynctest "Set up a node with Store enabled": var confBuilder = defaultTestWakuConfBuilder() confBuilder.storeServiceConf.withEnabled(true) confBuilder.storeServiceConf.withDbUrl("sqlite://store.sqlite3") let conf = confBuilder.build().value - let node = setupNode(conf, relay = Relay.new()).valueOr: + let node = (await setupNode(conf, relay = Relay.new())).valueOr: raiseAssert error check: @@ -37,28 +37,28 @@ suite "Node Factory": not node.wakuStore.isNil() not node.wakuArchive.isNil() -test "Set up a node with Filter enabled": +asynctest "Set up a node with Filter enabled": var confBuilder = defaultTestWakuConfBuilder() confBuilder.filterServiceConf.withEnabled(true) let conf = confBuilder.build().value - let node = setupNode(conf, relay = Relay.new()).valueOr: + let node = (await setupNode(conf, relay = Relay.new())).valueOr: raiseAssert error check: not node.isNil() not node.wakuFilter.isNil() -test "Start a node based on default configurations": +asynctest "Start a node based on default configurations": let conf = defaultTestWakuConf() - let node = setupNode(conf, relay = Relay.new()).valueOr: + let node = (await setupNode(conf, relay = Relay.new())).valueOr: raiseAssert error assert not node.isNil(), "Node can't be nil" let startRes = catch: - (waitFor startNode(node, conf)) + (await startNode(node, conf)) assert not startRes.isErr(), "Exception starting node" assert startRes.get().isOk(), "Error starting node " & startRes.get().error @@ -67,4 +67,4 @@ test "Start a node based on default configurations": node.started == true ## Cleanup - waitFor node.stop() + await node.stop() diff --git a/tests/waku_discv5/test_waku_discv5.nim b/tests/waku_discv5/test_waku_discv5.nim index 79913ce92..734ea4bf9 100644 --- a/tests/waku_discv5/test_waku_discv5.nim +++ b/tests/waku_discv5/test_waku_discv5.nim @@ -429,7 +429,7 @@ suite "Waku Discovery v5": let conf = confBuilder.build().valueOr: raiseAssert error - let waku0 = Waku.new(conf).valueOr: + let waku0 = (await Waku.new(conf)).valueOr: raiseAssert error (waitFor startWaku(addr waku0)).isOkOr: raiseAssert error @@ -444,7 +444,7 @@ suite "Waku Discovery v5": let conf1 = confBuilder.build().valueOr: raiseAssert error - let waku1 = Waku.new(conf1).valueOr: + let waku1 = (await Waku.new(conf1)).valueOr: raiseAssert error (waitFor startWaku(addr waku1)).isOkOr: raiseAssert error @@ -461,7 +461,7 @@ suite "Waku Discovery v5": let conf2 = confBuilder.build().valueOr: raiseAssert error - let waku2 = Waku.new(conf2).valueOr: + let waku2 = (await Waku.new(conf2)).valueOr: raiseAssert error (waitFor startWaku(addr waku2)).isOkOr: raiseAssert error @@ -492,7 +492,7 @@ suite "Waku Discovery v5": let conf = confBuilder.build().valueOr: raiseAssert error - let waku = Waku.new(conf).valueOr: + let waku = (await Waku.new(conf)).valueOr: raiseAssert error discard setupDiscoveryV5( @@ -523,7 +523,7 @@ suite "Waku Discovery v5": let conf = confBuilder.build().valueOr: raiseAssert error - let waku = Waku.new(conf).valueOr: + let waku = (await Waku.new(conf)).valueOr: raiseAssert error discard setupDiscoveryV5( diff --git a/tests/wakunode2/test_app.nim b/tests/wakunode2/test_app.nim index 2d62d4956..b16880787 100644 --- a/tests/wakunode2/test_app.nim +++ b/tests/wakunode2/test_app.nim @@ -17,7 +17,7 @@ suite "Wakunode2 - Waku": ## Given let conf = defaultTestWakuConf() - let waku = Waku.new(conf).valueOr: + let waku = (waitFor Waku.new(conf)).valueOr: raiseAssert error ## When @@ -33,7 +33,7 @@ suite "Wakunode2 - Waku initialization": var conf = defaultTestWakuConf() conf.peerPersistence = true - let waku = Waku.new(conf).valueOr: + let waku = (waitFor Waku.new(conf)).valueOr: raiseAssert error check: @@ -44,7 +44,7 @@ suite "Wakunode2 - Waku initialization": var conf = defaultTestWakuConf() ## When - var waku = Waku.new(conf).valueOr: + var waku = (waitFor Waku.new(conf)).valueOr: raiseAssert error (waitFor startWaku(addr waku)).isOkOr: @@ -68,7 +68,7 @@ suite "Wakunode2 - Waku initialization": conf.endpointConf.p2pTcpPort = Port(0) ## When - var waku = Waku.new(conf).valueOr: + var waku = (waitFor Waku.new(conf)).valueOr: raiseAssert error (waitFor startWaku(addr waku)).isOkOr: diff --git a/waku/factory/internal_config.nim b/waku/factory/internal_config.nim index 9fc3602a0..60b319e0d 100644 --- a/waku/factory/internal_config.nim +++ b/waku/factory/internal_config.nim @@ -65,7 +65,7 @@ proc networkConfiguration*( dnsAddrsNameServers: seq[IpAddress], portsShift: uint16, clientId: string, -): NetConfigResult = +): Future[NetConfigResult] {.async.} = ## `udpPort` is only supplied to satisfy underlying APIs but is not ## actually a supported transport for libp2p traffic. let natRes = setupNat( @@ -99,7 +99,7 @@ proc networkConfiguration*( # Resolve and use DNS domain IP if conf.dns4DomainName.isSome() and extIp.isNone(): try: - let dnsRes = waitFor dnsResolve(conf.dns4DomainName.get(), dnsAddrsNameServers) + let dnsRes = await dnsResolve(conf.dns4DomainName.get(), dnsAddrsNameServers) if dnsRes.isErr(): return err($dnsRes.error) # Pass error down the stack diff --git a/waku/factory/node_factory.nim b/waku/factory/node_factory.nim index 95693cc79..f49d1f11a 100644 --- a/waku/factory/node_factory.nim +++ b/waku/factory/node_factory.nim @@ -166,7 +166,7 @@ proc setupProtocols( if conf.storeServiceConf.isSome(): let storeServiceConf = conf.storeServiceConf.get() if storeServiceConf.supportV2: - let archiveDriverRes = waitFor legacy_driver.ArchiveDriver.new( + let archiveDriverRes = await legacy_driver.ArchiveDriver.new( storeServiceConf.dbUrl, storeServiceConf.dbVacuum, storeServiceConf.dbMigration, storeServiceConf.maxNumDbConnections, onFatalErrorAction, ) @@ -200,7 +200,7 @@ proc setupProtocols( else: storeServiceConf.dbMigration - let archiveDriverRes = waitFor driver.ArchiveDriver.new( + let archiveDriverRes = await driver.ArchiveDriver.new( storeServiceConf.dbUrl, storeServiceConf.dbVacuum, migrate, storeServiceConf.maxNumDbConnections, onFatalErrorAction, ) @@ -354,7 +354,7 @@ proc setupProtocols( ) try: - waitFor node.mountRlnRelay(rlnConf) + await node.mountRlnRelay(rlnConf) except CatchableError: return err("failed to mount waku RLN relay protocol: " & getCurrentExceptionMsg()) @@ -476,11 +476,13 @@ proc startNode*( proc setupNode*( wakuConf: WakuConf, rng: ref HmacDrbgContext = crypto.newRng(), relay: Relay -): Result[WakuNode, string] = - let netConfig = networkConfiguration( - wakuConf.clusterId, wakuConf.endpointConf, wakuConf.discv5Conf, - wakuConf.webSocketConf, wakuConf.wakuFlags, wakuConf.dnsAddrsNameServers, - wakuConf.portsShift, clientId, +): Future[Result[WakuNode, string]] {.async.} = + let netConfig = ( + await networkConfiguration( + wakuConf.clusterId, wakuConf.endpointConf, wakuConf.discv5Conf, + wakuConf.webSocketConf, wakuConf.wakuFlags, wakuConf.dnsAddrsNameServers, + wakuConf.portsShift, clientId, + ) ).valueOr: error "failed to create internal config", error = error return err("failed to create internal config: " & error) @@ -511,7 +513,7 @@ proc setupNode*( debug "Mounting protocols" try: - (waitFor node.setupProtocols(wakuConf)).isOkOr: + (await node.setupProtocols(wakuConf)).isOkOr: error "Mounting protocols failed", error = error return err("Mounting protocols failed: " & error) except CatchableError: diff --git a/waku/factory/waku.nim b/waku/factory/waku.nim index 137e3531c..27c9437ff 100644 --- a/waku/factory/waku.nim +++ b/waku/factory/waku.nim @@ -162,7 +162,7 @@ proc setupAppCallbacks( proc new*( T: type Waku, wakuConf: WakuConf, appCallbacks: AppCallbacks = nil -): Result[Waku, string] = +): Future[Result[Waku, string]] {.async.} = let rng = crypto.newRng() logging.setupLog(wakuConf.logLevel, wakuConf.logFormat) @@ -186,7 +186,7 @@ proc new*( var relay = newCircuitRelay(wakuConf.circuitRelayClient) - let node = setupNode(wakuConf, rng, relay).valueOr: + let node = (await setupNode(wakuConf, rng, relay)).valueOr: error "Failed setting up node", error = $error return err("Failed setting up node: " & $error) @@ -248,7 +248,7 @@ proc getPorts( return ok((tcpPort: tcpPort, websocketPort: websocketPort)) -proc getRunningNetConfig(waku: ptr Waku): Result[NetConfig, string] = +proc getRunningNetConfig(waku: ptr Waku): Future[Result[NetConfig, string]] {.async.} = var conf = waku[].conf let (tcpPort, websocketPort) = getPorts(waku[].node.switch.peerInfo.listenAddrs).valueOr: return err("Could not retrieve ports: " & error) @@ -260,16 +260,18 @@ proc getRunningNetConfig(waku: ptr Waku): Result[NetConfig, string] = conf.webSocketConf.get().port = websocketPort.get() # Rebuild NetConfig with bound port values - let netConf = networkConfiguration( - conf.clusterId, conf.endpointConf, conf.discv5Conf, conf.webSocketConf, - conf.wakuFlags, conf.dnsAddrsNameServers, conf.portsShift, clientId, + let netConf = ( + await networkConfiguration( + conf.clusterId, conf.endpointConf, conf.discv5Conf, conf.webSocketConf, + conf.wakuFlags, conf.dnsAddrsNameServers, conf.portsShift, clientId, + ) ).valueOr: return err("Could not update NetConfig: " & error) return ok(netConf) -proc updateEnr(waku: ptr Waku): Result[void, string] = - let netConf: NetConfig = getRunningNetConfig(waku).valueOr: +proc updateEnr(waku: ptr Waku): Future[Result[void, string]] {.async.} = + let netConf: NetConfig = (await getRunningNetConfig(waku)).valueOr: return err("error calling updateNetConfig: " & $error) let record = enrConfiguration(waku[].conf, netConf).valueOr: return err("ENR setup failed: " & error) @@ -309,11 +311,11 @@ proc updateAddressInENR(waku: ptr Waku): Result[void, string] = return ok() -proc updateWaku(waku: ptr Waku): Result[void, string] = +proc updateWaku(waku: ptr Waku): Future[Result[void, string]] {.async.} = let conf = waku[].conf if conf.endpointConf.p2pTcpPort == Port(0) or (conf.websocketConf.isSome() and conf.websocketConf.get.port == Port(0)): - updateEnr(waku).isOkOr: + (await updateEnr(waku)).isOkOr: return err("error calling updateEnr: " & $error) ?updateAnnouncedAddrWithPrimaryIpAddr(waku[].node) @@ -381,7 +383,7 @@ proc startWaku*(waku: ptr Waku): Future[Result[void, string]] {.async.} = return err("error while calling startNode: " & $error) ## Update waku data that is set dynamically on node start - updateWaku(waku).isOkOr: + (await updateWaku(waku)).isOkOr: return err("Error in updateApp: " & $error) ## Discv5 @@ -424,8 +426,12 @@ proc startWaku*(waku: ptr Waku): Future[Result[void, string]] {.async.} = return err ("Starting protocols support REST server failed: " & $error) if conf.metricsServerConf.isSome(): - waku[].metricsServer = waku_metrics.startMetricsServerAndLogging( - conf.metricsServerConf.get(), conf.portsShift + waku[].metricsServer = ( + await ( + waku_metrics.startMetricsServerAndLogging( + conf.metricsServerConf.get(), conf.portsShift + ) + ) ).valueOr: return err("Starting monitoring and external interfaces failed: " & error) diff --git a/waku/node/waku_metrics.nim b/waku/node/waku_metrics.nim index ba61f6ef8..8d38624c1 100644 --- a/waku/node/waku_metrics.nim +++ b/waku/node/waku_metrics.nim @@ -59,14 +59,14 @@ proc startMetricsLog*() = proc startMetricsServer( serverIp: IpAddress, serverPort: Port -): Result[MetricsHttpServerRef, string] = +): Future[Result[MetricsHttpServerRef, string]] {.async.} = info "Starting metrics HTTP server", serverIp = $serverIp, serverPort = $serverPort let server = MetricsHttpServerRef.new($serverIp, serverPort).valueOr: return err("metrics HTTP server start failed: " & $error) try: - waitFor server.start() + await server.start() except CatchableError: return err("metrics HTTP server start failed: " & getCurrentExceptionMsg()) @@ -75,10 +75,12 @@ proc startMetricsServer( proc startMetricsServerAndLogging*( conf: MetricsServerConf, portsShift: uint16 -): Result[MetricsHttpServerRef, string] = +): Future[Result[MetricsHttpServerRef, string]] {.async.} = var metricsServer: MetricsHttpServerRef - metricsServer = startMetricsServer( - conf.httpAddress, Port(conf.httpPort.uint16 + portsShift) + metricsServer = ( + await ( + startMetricsServer(conf.httpAddress, Port(conf.httpPort.uint16 + portsShift)) + ) ).valueOr: return err("Starting metrics server failed. Continuing in current state:" & $error) diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index db689e8a0..c9d557894 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -1240,7 +1240,7 @@ proc mountRlnRelay*( CatchableError, "WakuRelay protocol is not mounted, cannot mount WakuRlnRelay" ) - let rlnRelayRes = waitFor WakuRlnRelay.new(rlnConf, registrationHandler) + let rlnRelayRes = await WakuRlnRelay.new(rlnConf, registrationHandler) if rlnRelayRes.isErr(): raise newException(CatchableError, "failed to mount WakuRlnRelay: " & rlnRelayRes.error)