Skip to content

Commit ff93643

Browse files
Merge branch 'master' into release/v0.37
2 parents 9a341a6 + 1762548 commit ff93643

File tree

167 files changed

+982
-1360
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

167 files changed

+982
-1360
lines changed

.gitmodules

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,3 @@
184184
url = https://github.com/waku-org/waku-rlnv2-contract.git
185185
ignore = untracked
186186
branch = master
187-
[submodule "vendor/mix"]
188-
path = vendor/mix
189-
url = https://github.com/vacp2p/mix/
190-
branch = main

apps/chat2/chat2.nim

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -317,27 +317,19 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} =
317317
if conf.logLevel != LogLevel.NONE:
318318
setLogLevel(conf.logLevel)
319319

320-
let natRes = setupNat(
320+
let (extIp, extTcpPort, extUdpPort) = setupNat(
321321
conf.nat,
322322
clientId,
323323
Port(uint16(conf.tcpPort) + conf.portsShift),
324324
Port(uint16(conf.udpPort) + conf.portsShift),
325-
)
326-
327-
if natRes.isErr():
328-
raise newException(ValueError, "setupNat error " & natRes.error)
329-
330-
let (extIp, extTcpPort, extUdpPort) = natRes.get()
325+
).valueOr:
326+
raise newException(ValueError, "setupNat error " & error)
331327

332328
var enrBuilder = EnrBuilder.init(nodeKey)
333329

334-
let recordRes = enrBuilder.build()
335-
let record =
336-
if recordRes.isErr():
337-
error "failed to create enr record", error = recordRes.error
338-
quit(QuitFailure)
339-
else:
340-
recordRes.get()
330+
let record = enrBuilder.build().valueOr:
331+
error "failed to create enr record", error = error
332+
quit(QuitFailure)
341333

342334
let node = block:
343335
var builder = WakuNodeBuilder.init()

apps/chat2bridge/chat2bridge.nim

Lines changed: 19 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -126,23 +126,20 @@ proc toMatterbridge(
126126

127127
assert chat2Msg.isOk
128128

129-
let postRes = cmb.mbClient.postMessage(
130-
text = string.fromBytes(chat2Msg[].payload), username = chat2Msg[].nick
131-
)
132-
133-
if postRes.isErr() or (postRes[] == false):
129+
if not cmb.mbClient
130+
.postMessage(text = string.fromBytes(chat2Msg[].payload), username = chat2Msg[].nick)
131+
.containsValue(true):
134132
chat2_mb_dropped.inc(labelValues = ["duplicate"])
135133
error "Matterbridge host unreachable. Dropping message."
136134

137135
proc pollMatterbridge(cmb: Chat2MatterBridge, handler: MbMessageHandler) {.async.} =
138136
while cmb.running:
139-
if (let getRes = cmb.mbClient.getMessages(); getRes.isOk()):
140-
for jsonNode in getRes[]:
141-
await handler(jsonNode)
142-
else:
137+
let msg = cmb.mbClient.getMessages().valueOr:
143138
error "Matterbridge host unreachable. Sleeping before retrying."
144139
await sleepAsync(chronos.seconds(10))
145-
140+
continue
141+
for jsonNode in msg:
142+
await handler(jsonNode)
146143
await sleepAsync(cmb.pollPeriod)
147144

148145
##############
@@ -243,7 +240,7 @@ proc stop*(cmb: Chat2MatterBridge) {.async: (raises: [Exception]).} =
243240
{.pop.}
244241
# @TODO confutils.nim(775, 17) Error: can raise an unlisted exception: ref IOError
245242
when isMainModule:
246-
import waku/common/utils/nat, waku/waku_api/message_cache
243+
import waku/common/utils/nat, waku/rest_api/message_cache
247244

248245
let
249246
rng = newRng()
@@ -252,25 +249,21 @@ when isMainModule:
252249
if conf.logLevel != LogLevel.NONE:
253250
setLogLevel(conf.logLevel)
254251

255-
let natRes = setupNat(
252+
let (nodev2ExtIp, nodev2ExtPort, _) = setupNat(
256253
conf.nat,
257254
clientId,
258255
Port(uint16(conf.libp2pTcpPort) + conf.portsShift),
259256
Port(uint16(conf.udpPort) + conf.portsShift),
260-
)
261-
if natRes.isErr():
262-
error "Error in setupNat", error = natRes.error
263-
264-
# Load address configuration
265-
let
266-
(nodev2ExtIp, nodev2ExtPort, _) = natRes.get()
267-
## The following heuristic assumes that, in absence of manual
268-
## config, the external port is the same as the bind port.
269-
extPort =
270-
if nodev2ExtIp.isSome() and nodev2ExtPort.isNone():
271-
some(Port(uint16(conf.libp2pTcpPort) + conf.portsShift))
272-
else:
273-
nodev2ExtPort
257+
).valueOr:
258+
raise newException(ValueError, "setupNat error " & error)
259+
260+
## The following heuristic assumes that, in absence of manual
261+
## config, the external port is the same as the bind port.
262+
let extPort =
263+
if nodev2ExtIp.isSome() and nodev2ExtPort.isNone():
264+
some(Port(uint16(conf.libp2pTcpPort) + conf.portsShift))
265+
else:
266+
nodev2ExtPort
274267

275268
let bridge = Chat2Matterbridge.new(
276269
mbHostUri = "http://" & $initTAddress(conf.mbHostAddress, Port(conf.mbHostPort)),

apps/chat2mix/chat2mix.nim

Lines changed: 52 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ import
2929
peerid, # Implement how peers interact
3030
protobuf/minprotobuf, # message serialisation/deserialisation from and to protobufs
3131
nameresolving/dnsresolver,
32+
protocols/mix/curve25519,
3233
] # define DNS resolution
33-
import mix/curve25519
3434
import
3535
waku/[
3636
waku_core,
@@ -175,18 +175,16 @@ proc startMetricsServer(
175175
): Result[MetricsHttpServerRef, string] =
176176
info "Starting metrics HTTP server", serverIp = $serverIp, serverPort = $serverPort
177177

178-
let metricsServerRes = MetricsHttpServerRef.new($serverIp, serverPort)
179-
if metricsServerRes.isErr():
180-
return err("metrics HTTP server start failed: " & $metricsServerRes.error)
178+
let server = MetricsHttpServerRef.new($serverIp, serverPort).valueOr:
179+
return err("metrics HTTP server start failed: " & $error)
181180

182-
let server = metricsServerRes.value
183181
try:
184182
waitFor server.start()
185183
except CatchableError:
186184
return err("metrics HTTP server start failed: " & getCurrentExceptionMsg())
187185

188186
info "Metrics HTTP server started", serverIp = $serverIp, serverPort = $serverPort
189-
ok(metricsServerRes.value)
187+
ok(server)
190188

191189
proc publish(c: Chat, line: string) {.async.} =
192190
# First create a Chat2Message protobuf with this line of text
@@ -333,57 +331,56 @@ proc maintainSubscription(
333331
const maxFailedServiceNodeSwitches = 10
334332
var noFailedSubscribes = 0
335333
var noFailedServiceNodeSwitches = 0
334+
const RetryWaitMs = 2.seconds # Quick retry interval
335+
const SubscriptionMaintenanceMs = 30.seconds # Subscription maintenance interval
336336
while true:
337337
info "maintaining subscription at", peer = constructMultiaddrStr(actualFilterPeer)
338338
# First use filter-ping to check if we have an active subscription
339-
let pingRes = await wakuNode.wakuFilterClient.ping(actualFilterPeer)
340-
if pingRes.isErr():
341-
# No subscription found. Let's subscribe.
342-
error "ping failed.", err = pingRes.error
343-
trace "no subscription found. Sending subscribe request"
339+
let pingErr = (await wakuNode.wakuFilterClient.ping(actualFilterPeer)).errorOr:
340+
await sleepAsync(SubscriptionMaintenanceMs)
341+
info "subscription is live."
342+
continue
344343

345-
let subscribeRes = await wakuNode.filterSubscribe(
344+
# No subscription found. Let's subscribe.
345+
error "ping failed.", error = pingErr
346+
trace "no subscription found. Sending subscribe request"
347+
348+
let subscribeErr = (
349+
await wakuNode.filterSubscribe(
346350
some(filterPubsubTopic), filterContentTopic, actualFilterPeer
347351
)
352+
).errorOr:
353+
await sleepAsync(SubscriptionMaintenanceMs)
354+
if noFailedSubscribes > 0:
355+
noFailedSubscribes -= 1
356+
notice "subscribe request successful."
357+
continue
348358

349-
if subscribeRes.isErr():
350-
noFailedSubscribes += 1
351-
error "Subscribe request failed.",
352-
err = subscribeRes.error,
353-
peer = actualFilterPeer,
354-
failCount = noFailedSubscribes
355-
356-
# TODO: disconnet from failed actualFilterPeer
357-
# asyncSpawn(wakuNode.peerManager.switch.disconnect(p))
358-
# wakunode.peerManager.peerStore.delete(actualFilterPeer)
359-
360-
if noFailedSubscribes < maxFailedSubscribes:
361-
await sleepAsync(2000) # Wait a bit before retrying
362-
continue
363-
elif not preventPeerSwitch:
364-
let peerOpt = selectRandomServicePeer(
365-
wakuNode.peerManager, some(actualFilterPeer), WakuFilterSubscribeCodec
366-
)
367-
peerOpt.isOkOr:
368-
error "Failed to find new service peer. Exiting."
369-
noFailedServiceNodeSwitches += 1
370-
break
371-
372-
actualFilterPeer = peerOpt.get()
373-
info "Found new peer for codec",
374-
codec = filterPubsubTopic, peer = constructMultiaddrStr(actualFilterPeer)
375-
376-
noFailedSubscribes = 0
377-
continue # try again with new peer without delay
378-
else:
379-
if noFailedSubscribes > 0:
380-
noFailedSubscribes -= 1
381-
382-
notice "subscribe request successful."
359+
noFailedSubscribes += 1
360+
error "Subscribe request failed.",
361+
error = subscribeErr, peer = actualFilterPeer, failCount = noFailedSubscribes
362+
363+
# TODO: disconnet from failed actualFilterPeer
364+
# asyncSpawn(wakuNode.peerManager.switch.disconnect(p))
365+
# wakunode.peerManager.peerStore.delete(actualFilterPeer)
366+
367+
if noFailedSubscribes < maxFailedSubscribes:
368+
await sleepAsync(RetryWaitMs) # Wait a bit before retrying
369+
elif not preventPeerSwitch:
370+
# try again with new peer without delay
371+
let actualFilterPeer = selectRandomServicePeer(
372+
wakuNode.peerManager, some(actualFilterPeer), WakuFilterSubscribeCodec
373+
).valueOr:
374+
error "Failed to find new service peer. Exiting."
375+
noFailedServiceNodeSwitches += 1
376+
break
377+
378+
info "Found new peer for codec",
379+
codec = filterPubsubTopic, peer = constructMultiaddrStr(actualFilterPeer)
380+
381+
noFailedSubscribes = 0
383382
else:
384-
info "subscription is live."
385-
386-
await sleepAsync(30000) # Subscription maintenance interval
383+
await sleepAsync(SubscriptionMaintenanceMs)
387384

388385
{.pop.}
389386
# @TODO confutils.nim(775, 17) Error: can raise an unlisted exception: ref IOError
@@ -401,17 +398,13 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} =
401398
if conf.logLevel != LogLevel.NONE:
402399
setLogLevel(conf.logLevel)
403400

404-
let natRes = setupNat(
401+
let (extIp, extTcpPort, extUdpPort) = setupNat(
405402
conf.nat,
406403
clientId,
407404
Port(uint16(conf.tcpPort) + conf.portsShift),
408405
Port(uint16(conf.udpPort) + conf.portsShift),
409-
)
410-
411-
if natRes.isErr():
412-
raise newException(ValueError, "setupNat error " & natRes.error)
413-
414-
let (extIp, extTcpPort, extUdpPort) = natRes.get()
406+
).valueOr:
407+
raise newException(ValueError, "setupNat error " & error)
415408

416409
var enrBuilder = EnrBuilder.init(nodeKey)
417410

@@ -421,13 +414,9 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} =
421414
error "failed to add sharded topics to ENR", error = error
422415
quit(QuitFailure)
423416

424-
let recordRes = enrBuilder.build()
425-
let record =
426-
if recordRes.isErr():
427-
error "failed to create enr record", error = recordRes.error
428-
quit(QuitFailure)
429-
else:
430-
recordRes.get()
417+
let record = enrBuilder.build().valueOr:
418+
error "failed to create enr record", error = error
419+
quit(QuitFailure)
431420

432421
let node = block:
433422
var builder = WakuNodeBuilder.init()

apps/liteprotocoltester/diagnose_connections.nim

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import
1414
libp2p/wire
1515

1616
import
17-
../../tools/confutils/cli_args,
17+
tools/confutils/cli_args,
1818
waku/[
1919
node/peer_manager,
2020
waku_lightpush/common,
@@ -59,7 +59,4 @@ proc logSelfPeers*(pm: PeerManager) =
5959
{allPeers(pm)}
6060
*------------------------------------------------------------------------------------------*""".fmt()
6161

62-
if printable.isErr():
63-
echo "Error while printing statistics: " & printable.error().msg
64-
else:
65-
echo printable.get()
62+
echo printable.valueOr("Error while printing statistics: " & error.msg)

apps/liteprotocoltester/liteprotocoltester.nim

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import
1111
confutils
1212

1313
import
14-
../../tools/confutils/cli_args,
14+
tools/confutils/cli_args,
1515
waku/[
1616
common/enr,
1717
common/logging,
@@ -49,13 +49,10 @@ when isMainModule:
4949

5050
const versionString = "version / git commit hash: " & waku_factory.git_version
5151

52-
let confRes = LiteProtocolTesterConf.load(version = versionString)
53-
if confRes.isErr():
54-
error "failure while loading the configuration", error = confRes.error
52+
let conf = LiteProtocolTesterConf.load(version = versionString).valueOr:
53+
error "failure while loading the configuration", error = error
5554
quit(QuitFailure)
5655

57-
var conf = confRes.get()
58-
5956
## Logging setup
6057
logging.setupLog(conf.logLevel, conf.logFormat)
6158

@@ -187,7 +184,7 @@ when isMainModule:
187184
error "Service node not found in time via PX"
188185
quit(QuitFailure)
189186

190-
if futForServiceNode.read().isErr():
187+
futForServiceNode.read().isOkOr:
191188
error "Service node for test not found via PX"
192189
quit(QuitFailure)
193190

apps/liteprotocoltester/publisher.nim

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,7 @@ proc reportSentMessages() =
8989
|{numMessagesToSend+failedToSendCount:>11} |{messagesSent:>11} |{failedToSendCount:>11} |
9090
*----------------------------------------*""".fmt()
9191

92-
if report.isErr:
93-
echo "Error while printing statistics"
94-
else:
95-
echo report.get()
92+
echo report.valueOr("Error while printing statistics")
9693

9794
echo "*--------------------------------------------------------------------------------------------------*"
9895
echo "| Failure cause | count |"

0 commit comments

Comments
 (0)