chore: cleaning waitFor instances (#3495)

This commit is contained in:
gabrielmer 2025-07-10 19:49:47 +03:00 committed by GitHub
parent 3133aaaf71
commit 012d719722
13 changed files with 64 additions and 54 deletions

View File

@ -122,7 +122,7 @@ when isMainModule:
error "Issue converting toWakuConf", error = $error error "Issue converting toWakuConf", error = $error
quit(QuitFailure) quit(QuitFailure)
var waku = Waku.new(wakuConf).valueOr: var waku = (waitFor Waku.new(wakuConf)).valueOr:
error "Waku initialization failed", error = error error "Waku initialization failed", error = error
quit(QuitFailure) quit(QuitFailure)

View File

@ -56,7 +56,7 @@ when isMainModule:
error "Waku configuration failed", error = error error "Waku configuration failed", error = error
quit(QuitFailure) quit(QuitFailure)
var waku = Waku.new(conf).valueOr: var waku = (waitFor Waku.new(conf)).valueOr:
error "Waku initialization failed", error = error error "Waku initialization failed", error = error
quit(QuitFailure) quit(QuitFailure)

View File

@ -77,7 +77,7 @@ proc setupAndSubscribe(rng: ref HmacDrbgContext) {.async.} =
let node = builder.build().tryGet() let node = builder.build().tryGet()
node.mountMetadata(clusterId).expect("failed to mount waku metadata protocol") node.mountMetadata(clusterId).expect("failed to mount waku metadata protocol")
waitFor node.mountFilterClient() await node.mountFilterClient()
await node.start() await node.start()

View File

@ -46,7 +46,7 @@ proc setup*(): Waku =
conf.rlnRelay = twnNetworkConf.rlnRelay conf.rlnRelay = twnNetworkConf.rlnRelay
debug "Starting node" debug "Starting node"
var waku = Waku.new(conf).valueOr: var waku = (waitFor Waku.new(conf)).valueOr:
error "Waku initialization failed", error = error error "Waku initialization failed", error = error
quit(QuitFailure) quit(QuitFailure)

View File

@ -79,7 +79,7 @@ proc createWaku(
wakuConf.restServerConf = none(RestServerConf) ## don't want REST in libwaku 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 error "waku initialization failed", error = error
return err("Failed setting up Waku: " & $error) return err("Failed setting up Waku: " & $error)

View File

@ -9,10 +9,10 @@ import
waku/factory/conf_builder/conf_builder waku/factory/conf_builder/conf_builder
suite "Node Factory": 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 conf = defaultTestWakuConf()
let node = setupNode(conf, relay = Relay.new()).valueOr: let node = (await setupNode(conf, relay = Relay.new())).valueOr:
raiseAssert error raiseAssert error
check: check:
@ -23,13 +23,13 @@ suite "Node Factory":
not node.wakuStoreClient.isNil() not node.wakuStoreClient.isNil()
not node.wakuRendezvous.isNil() not node.wakuRendezvous.isNil()
test "Set up a node with Store enabled": asynctest "Set up a node with Store enabled":
var confBuilder = defaultTestWakuConfBuilder() var confBuilder = defaultTestWakuConfBuilder()
confBuilder.storeServiceConf.withEnabled(true) confBuilder.storeServiceConf.withEnabled(true)
confBuilder.storeServiceConf.withDbUrl("sqlite://store.sqlite3") confBuilder.storeServiceConf.withDbUrl("sqlite://store.sqlite3")
let conf = confBuilder.build().value let conf = confBuilder.build().value
let node = setupNode(conf, relay = Relay.new()).valueOr: let node = (await setupNode(conf, relay = Relay.new())).valueOr:
raiseAssert error raiseAssert error
check: check:
@ -37,28 +37,28 @@ suite "Node Factory":
not node.wakuStore.isNil() not node.wakuStore.isNil()
not node.wakuArchive.isNil() not node.wakuArchive.isNil()
test "Set up a node with Filter enabled": asynctest "Set up a node with Filter enabled":
var confBuilder = defaultTestWakuConfBuilder() var confBuilder = defaultTestWakuConfBuilder()
confBuilder.filterServiceConf.withEnabled(true) confBuilder.filterServiceConf.withEnabled(true)
let conf = confBuilder.build().value let conf = confBuilder.build().value
let node = setupNode(conf, relay = Relay.new()).valueOr: let node = (await setupNode(conf, relay = Relay.new())).valueOr:
raiseAssert error raiseAssert error
check: check:
not node.isNil() not node.isNil()
not node.wakuFilter.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 conf = defaultTestWakuConf()
let node = setupNode(conf, relay = Relay.new()).valueOr: let node = (await setupNode(conf, relay = Relay.new())).valueOr:
raiseAssert error raiseAssert error
assert not node.isNil(), "Node can't be nil" assert not node.isNil(), "Node can't be nil"
let startRes = catch: let startRes = catch:
(waitFor startNode(node, conf)) (await startNode(node, conf))
assert not startRes.isErr(), "Exception starting node" assert not startRes.isErr(), "Exception starting node"
assert startRes.get().isOk(), "Error starting node " & startRes.get().error 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 node.started == true
## Cleanup ## Cleanup
waitFor node.stop() await node.stop()

View File

@ -429,7 +429,7 @@ suite "Waku Discovery v5":
let conf = confBuilder.build().valueOr: let conf = confBuilder.build().valueOr:
raiseAssert error raiseAssert error
let waku0 = Waku.new(conf).valueOr: let waku0 = (await Waku.new(conf)).valueOr:
raiseAssert error raiseAssert error
(waitFor startWaku(addr waku0)).isOkOr: (waitFor startWaku(addr waku0)).isOkOr:
raiseAssert error raiseAssert error
@ -444,7 +444,7 @@ suite "Waku Discovery v5":
let conf1 = confBuilder.build().valueOr: let conf1 = confBuilder.build().valueOr:
raiseAssert error raiseAssert error
let waku1 = Waku.new(conf1).valueOr: let waku1 = (await Waku.new(conf1)).valueOr:
raiseAssert error raiseAssert error
(waitFor startWaku(addr waku1)).isOkOr: (waitFor startWaku(addr waku1)).isOkOr:
raiseAssert error raiseAssert error
@ -461,7 +461,7 @@ suite "Waku Discovery v5":
let conf2 = confBuilder.build().valueOr: let conf2 = confBuilder.build().valueOr:
raiseAssert error raiseAssert error
let waku2 = Waku.new(conf2).valueOr: let waku2 = (await Waku.new(conf2)).valueOr:
raiseAssert error raiseAssert error
(waitFor startWaku(addr waku2)).isOkOr: (waitFor startWaku(addr waku2)).isOkOr:
raiseAssert error raiseAssert error
@ -492,7 +492,7 @@ suite "Waku Discovery v5":
let conf = confBuilder.build().valueOr: let conf = confBuilder.build().valueOr:
raiseAssert error raiseAssert error
let waku = Waku.new(conf).valueOr: let waku = (await Waku.new(conf)).valueOr:
raiseAssert error raiseAssert error
discard setupDiscoveryV5( discard setupDiscoveryV5(
@ -523,7 +523,7 @@ suite "Waku Discovery v5":
let conf = confBuilder.build().valueOr: let conf = confBuilder.build().valueOr:
raiseAssert error raiseAssert error
let waku = Waku.new(conf).valueOr: let waku = (await Waku.new(conf)).valueOr:
raiseAssert error raiseAssert error
discard setupDiscoveryV5( discard setupDiscoveryV5(

View File

@ -17,7 +17,7 @@ suite "Wakunode2 - Waku":
## Given ## Given
let conf = defaultTestWakuConf() let conf = defaultTestWakuConf()
let waku = Waku.new(conf).valueOr: let waku = (waitFor Waku.new(conf)).valueOr:
raiseAssert error raiseAssert error
## When ## When
@ -33,7 +33,7 @@ suite "Wakunode2 - Waku initialization":
var conf = defaultTestWakuConf() var conf = defaultTestWakuConf()
conf.peerPersistence = true conf.peerPersistence = true
let waku = Waku.new(conf).valueOr: let waku = (waitFor Waku.new(conf)).valueOr:
raiseAssert error raiseAssert error
check: check:
@ -44,7 +44,7 @@ suite "Wakunode2 - Waku initialization":
var conf = defaultTestWakuConf() var conf = defaultTestWakuConf()
## When ## When
var waku = Waku.new(conf).valueOr: var waku = (waitFor Waku.new(conf)).valueOr:
raiseAssert error raiseAssert error
(waitFor startWaku(addr waku)).isOkOr: (waitFor startWaku(addr waku)).isOkOr:
@ -68,7 +68,7 @@ suite "Wakunode2 - Waku initialization":
conf.endpointConf.p2pTcpPort = Port(0) conf.endpointConf.p2pTcpPort = Port(0)
## When ## When
var waku = Waku.new(conf).valueOr: var waku = (waitFor Waku.new(conf)).valueOr:
raiseAssert error raiseAssert error
(waitFor startWaku(addr waku)).isOkOr: (waitFor startWaku(addr waku)).isOkOr:

View File

@ -65,7 +65,7 @@ proc networkConfiguration*(
dnsAddrsNameServers: seq[IpAddress], dnsAddrsNameServers: seq[IpAddress],
portsShift: uint16, portsShift: uint16,
clientId: string, clientId: string,
): NetConfigResult = ): Future[NetConfigResult] {.async.} =
## `udpPort` is only supplied to satisfy underlying APIs but is not ## `udpPort` is only supplied to satisfy underlying APIs but is not
## actually a supported transport for libp2p traffic. ## actually a supported transport for libp2p traffic.
let natRes = setupNat( let natRes = setupNat(
@ -99,7 +99,7 @@ proc networkConfiguration*(
# Resolve and use DNS domain IP # Resolve and use DNS domain IP
if conf.dns4DomainName.isSome() and extIp.isNone(): if conf.dns4DomainName.isSome() and extIp.isNone():
try: try:
let dnsRes = waitFor dnsResolve(conf.dns4DomainName.get(), dnsAddrsNameServers) let dnsRes = await dnsResolve(conf.dns4DomainName.get(), dnsAddrsNameServers)
if dnsRes.isErr(): if dnsRes.isErr():
return err($dnsRes.error) # Pass error down the stack return err($dnsRes.error) # Pass error down the stack

View File

@ -166,7 +166,7 @@ proc setupProtocols(
if conf.storeServiceConf.isSome(): if conf.storeServiceConf.isSome():
let storeServiceConf = conf.storeServiceConf.get() let storeServiceConf = conf.storeServiceConf.get()
if storeServiceConf.supportV2: if storeServiceConf.supportV2:
let archiveDriverRes = waitFor legacy_driver.ArchiveDriver.new( let archiveDriverRes = await legacy_driver.ArchiveDriver.new(
storeServiceConf.dbUrl, storeServiceConf.dbVacuum, storeServiceConf.dbMigration, storeServiceConf.dbUrl, storeServiceConf.dbVacuum, storeServiceConf.dbMigration,
storeServiceConf.maxNumDbConnections, onFatalErrorAction, storeServiceConf.maxNumDbConnections, onFatalErrorAction,
) )
@ -200,7 +200,7 @@ proc setupProtocols(
else: else:
storeServiceConf.dbMigration storeServiceConf.dbMigration
let archiveDriverRes = waitFor driver.ArchiveDriver.new( let archiveDriverRes = await driver.ArchiveDriver.new(
storeServiceConf.dbUrl, storeServiceConf.dbVacuum, migrate, storeServiceConf.dbUrl, storeServiceConf.dbVacuum, migrate,
storeServiceConf.maxNumDbConnections, onFatalErrorAction, storeServiceConf.maxNumDbConnections, onFatalErrorAction,
) )
@ -354,7 +354,7 @@ proc setupProtocols(
) )
try: try:
waitFor node.mountRlnRelay(rlnConf) await node.mountRlnRelay(rlnConf)
except CatchableError: except CatchableError:
return err("failed to mount waku RLN relay protocol: " & getCurrentExceptionMsg()) return err("failed to mount waku RLN relay protocol: " & getCurrentExceptionMsg())
@ -476,11 +476,13 @@ proc startNode*(
proc setupNode*( proc setupNode*(
wakuConf: WakuConf, rng: ref HmacDrbgContext = crypto.newRng(), relay: Relay wakuConf: WakuConf, rng: ref HmacDrbgContext = crypto.newRng(), relay: Relay
): Result[WakuNode, string] = ): Future[Result[WakuNode, string]] {.async.} =
let netConfig = networkConfiguration( let netConfig = (
wakuConf.clusterId, wakuConf.endpointConf, wakuConf.discv5Conf, await networkConfiguration(
wakuConf.webSocketConf, wakuConf.wakuFlags, wakuConf.dnsAddrsNameServers, wakuConf.clusterId, wakuConf.endpointConf, wakuConf.discv5Conf,
wakuConf.portsShift, clientId, wakuConf.webSocketConf, wakuConf.wakuFlags, wakuConf.dnsAddrsNameServers,
wakuConf.portsShift, clientId,
)
).valueOr: ).valueOr:
error "failed to create internal config", error = error error "failed to create internal config", error = error
return err("failed to create internal config: " & error) return err("failed to create internal config: " & error)
@ -511,7 +513,7 @@ proc setupNode*(
debug "Mounting protocols" debug "Mounting protocols"
try: try:
(waitFor node.setupProtocols(wakuConf)).isOkOr: (await node.setupProtocols(wakuConf)).isOkOr:
error "Mounting protocols failed", error = error error "Mounting protocols failed", error = error
return err("Mounting protocols failed: " & error) return err("Mounting protocols failed: " & error)
except CatchableError: except CatchableError:

View File

@ -162,7 +162,7 @@ proc setupAppCallbacks(
proc new*( proc new*(
T: type Waku, wakuConf: WakuConf, appCallbacks: AppCallbacks = nil T: type Waku, wakuConf: WakuConf, appCallbacks: AppCallbacks = nil
): Result[Waku, string] = ): Future[Result[Waku, string]] {.async.} =
let rng = crypto.newRng() let rng = crypto.newRng()
logging.setupLog(wakuConf.logLevel, wakuConf.logFormat) logging.setupLog(wakuConf.logLevel, wakuConf.logFormat)
@ -186,7 +186,7 @@ proc new*(
var relay = newCircuitRelay(wakuConf.circuitRelayClient) 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 error "Failed setting up node", error = $error
return err("Failed setting up node: " & $error) return err("Failed setting up node: " & $error)
@ -248,7 +248,7 @@ proc getPorts(
return ok((tcpPort: tcpPort, websocketPort: websocketPort)) 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 var conf = waku[].conf
let (tcpPort, websocketPort) = getPorts(waku[].node.switch.peerInfo.listenAddrs).valueOr: let (tcpPort, websocketPort) = getPorts(waku[].node.switch.peerInfo.listenAddrs).valueOr:
return err("Could not retrieve ports: " & error) 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() conf.webSocketConf.get().port = websocketPort.get()
# Rebuild NetConfig with bound port values # Rebuild NetConfig with bound port values
let netConf = networkConfiguration( let netConf = (
conf.clusterId, conf.endpointConf, conf.discv5Conf, conf.webSocketConf, await networkConfiguration(
conf.wakuFlags, conf.dnsAddrsNameServers, conf.portsShift, clientId, conf.clusterId, conf.endpointConf, conf.discv5Conf, conf.webSocketConf,
conf.wakuFlags, conf.dnsAddrsNameServers, conf.portsShift, clientId,
)
).valueOr: ).valueOr:
return err("Could not update NetConfig: " & error) return err("Could not update NetConfig: " & error)
return ok(netConf) return ok(netConf)
proc updateEnr(waku: ptr Waku): Result[void, string] = proc updateEnr(waku: ptr Waku): Future[Result[void, string]] {.async.} =
let netConf: NetConfig = getRunningNetConfig(waku).valueOr: let netConf: NetConfig = (await getRunningNetConfig(waku)).valueOr:
return err("error calling updateNetConfig: " & $error) return err("error calling updateNetConfig: " & $error)
let record = enrConfiguration(waku[].conf, netConf).valueOr: let record = enrConfiguration(waku[].conf, netConf).valueOr:
return err("ENR setup failed: " & error) return err("ENR setup failed: " & error)
@ -309,11 +311,11 @@ proc updateAddressInENR(waku: ptr Waku): Result[void, string] =
return ok() return ok()
proc updateWaku(waku: ptr Waku): Result[void, string] = proc updateWaku(waku: ptr Waku): Future[Result[void, string]] {.async.} =
let conf = waku[].conf let conf = waku[].conf
if conf.endpointConf.p2pTcpPort == Port(0) or if conf.endpointConf.p2pTcpPort == Port(0) or
(conf.websocketConf.isSome() and conf.websocketConf.get.port == Port(0)): (conf.websocketConf.isSome() and conf.websocketConf.get.port == Port(0)):
updateEnr(waku).isOkOr: (await updateEnr(waku)).isOkOr:
return err("error calling updateEnr: " & $error) return err("error calling updateEnr: " & $error)
?updateAnnouncedAddrWithPrimaryIpAddr(waku[].node) ?updateAnnouncedAddrWithPrimaryIpAddr(waku[].node)
@ -381,7 +383,7 @@ proc startWaku*(waku: ptr Waku): Future[Result[void, string]] {.async.} =
return err("error while calling startNode: " & $error) return err("error while calling startNode: " & $error)
## Update waku data that is set dynamically on node start ## Update waku data that is set dynamically on node start
updateWaku(waku).isOkOr: (await updateWaku(waku)).isOkOr:
return err("Error in updateApp: " & $error) return err("Error in updateApp: " & $error)
## Discv5 ## Discv5
@ -424,8 +426,12 @@ proc startWaku*(waku: ptr Waku): Future[Result[void, string]] {.async.} =
return err ("Starting protocols support REST server failed: " & $error) return err ("Starting protocols support REST server failed: " & $error)
if conf.metricsServerConf.isSome(): if conf.metricsServerConf.isSome():
waku[].metricsServer = waku_metrics.startMetricsServerAndLogging( waku[].metricsServer = (
conf.metricsServerConf.get(), conf.portsShift await (
waku_metrics.startMetricsServerAndLogging(
conf.metricsServerConf.get(), conf.portsShift
)
)
).valueOr: ).valueOr:
return err("Starting monitoring and external interfaces failed: " & error) return err("Starting monitoring and external interfaces failed: " & error)

View File

@ -59,14 +59,14 @@ proc startMetricsLog*() =
proc startMetricsServer( proc startMetricsServer(
serverIp: IpAddress, serverPort: Port serverIp: IpAddress, serverPort: Port
): Result[MetricsHttpServerRef, string] = ): Future[Result[MetricsHttpServerRef, string]] {.async.} =
info "Starting metrics HTTP server", serverIp = $serverIp, serverPort = $serverPort info "Starting metrics HTTP server", serverIp = $serverIp, serverPort = $serverPort
let server = MetricsHttpServerRef.new($serverIp, serverPort).valueOr: let server = MetricsHttpServerRef.new($serverIp, serverPort).valueOr:
return err("metrics HTTP server start failed: " & $error) return err("metrics HTTP server start failed: " & $error)
try: try:
waitFor server.start() await server.start()
except CatchableError: except CatchableError:
return err("metrics HTTP server start failed: " & getCurrentExceptionMsg()) return err("metrics HTTP server start failed: " & getCurrentExceptionMsg())
@ -75,10 +75,12 @@ proc startMetricsServer(
proc startMetricsServerAndLogging*( proc startMetricsServerAndLogging*(
conf: MetricsServerConf, portsShift: uint16 conf: MetricsServerConf, portsShift: uint16
): Result[MetricsHttpServerRef, string] = ): Future[Result[MetricsHttpServerRef, string]] {.async.} =
var metricsServer: MetricsHttpServerRef var metricsServer: MetricsHttpServerRef
metricsServer = startMetricsServer( metricsServer = (
conf.httpAddress, Port(conf.httpPort.uint16 + portsShift) await (
startMetricsServer(conf.httpAddress, Port(conf.httpPort.uint16 + portsShift))
)
).valueOr: ).valueOr:
return err("Starting metrics server failed. Continuing in current state:" & $error) return err("Starting metrics server failed. Continuing in current state:" & $error)

View File

@ -1240,7 +1240,7 @@ proc mountRlnRelay*(
CatchableError, "WakuRelay protocol is not mounted, cannot mount WakuRlnRelay" 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(): if rlnRelayRes.isErr():
raise raise
newException(CatchableError, "failed to mount WakuRlnRelay: " & rlnRelayRes.error) newException(CatchableError, "failed to mount WakuRlnRelay: " & rlnRelayRes.error)