mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-02-07 07:23:07 +00:00
handle cancelledError in extended kad
This commit is contained in:
parent
051d77f5f5
commit
d6f7ab3398
@ -209,7 +209,7 @@ type
|
||||
|
||||
contentTopic* {.
|
||||
desc: "Content topic for chat messages.",
|
||||
defaultValue: "/toy-chat-mix/2/huilong/proto",
|
||||
defaultValue: "/toy-chat/2/baixa-chiado/proto",
|
||||
name: "content-topic"
|
||||
.}: string
|
||||
|
||||
|
||||
@ -73,14 +73,18 @@ proc setupExtendedKademliaDiscovery*(
|
||||
|
||||
proc extractMixPubKey(service: ServiceInfo): Option[Curve25519Key] =
|
||||
if service.id != MixProtocolID:
|
||||
trace "service is not mix protocol", serviceId = service.id, mixProtocolId = MixProtocolID
|
||||
trace "service is not mix protocol",
|
||||
serviceId = service.id, mixProtocolId = MixProtocolID
|
||||
return none(Curve25519Key)
|
||||
|
||||
debug "found mix protocol service", dataLen = service.data.len, expectedLen = Curve25519KeySize
|
||||
debug "found mix protocol service",
|
||||
dataLen = service.data.len, expectedLen = Curve25519KeySize
|
||||
|
||||
if service.data.len != Curve25519KeySize:
|
||||
warn "invalid mix pub key length from kademlia record",
|
||||
expected = Curve25519KeySize, actual = service.data.len, dataHex = service.data.toHex()
|
||||
expected = Curve25519KeySize,
|
||||
actual = service.data.len,
|
||||
dataHex = service.data.toHex()
|
||||
return none(Curve25519Key)
|
||||
|
||||
let key = intoCurve25519Key(service.data)
|
||||
@ -107,7 +111,8 @@ proc remotePeerInfoFrom(record: ExtendedPeerRecord): Option[RemotePeerInfo] =
|
||||
|
||||
var mixPubKey = none(Curve25519Key)
|
||||
for service in record.services:
|
||||
debug "checking service", peerId = record.peerId, serviceId = service.id, dataLen = service.data.len
|
||||
debug "checking service",
|
||||
peerId = record.peerId, serviceId = service.id, dataLen = service.data.len
|
||||
mixPubKey = extractMixPubKey(service)
|
||||
if mixPubKey.isSome():
|
||||
debug "extracted mix public key from service", peerId = record.peerId
|
||||
@ -115,8 +120,7 @@ proc remotePeerInfoFrom(record: ExtendedPeerRecord): Option[RemotePeerInfo] =
|
||||
|
||||
if record.services.len > 0 and mixPubKey.isNone():
|
||||
debug "record has services but no valid mix key",
|
||||
peerId = record.peerId,
|
||||
services = record.services.mapIt(it.id)
|
||||
peerId = record.peerId, services = record.services.mapIt(it.id)
|
||||
|
||||
some(
|
||||
RemotePeerInfo.init(
|
||||
@ -133,44 +137,49 @@ proc runExtendedKademliaDiscoveryLoop*(
|
||||
): Future[void] {.async.} =
|
||||
info "extended kademlia discovery loop started", interval = interval
|
||||
|
||||
while true:
|
||||
if node.wakuKademlia.isNil():
|
||||
info "extended kademlia discovery loop stopping: protocol disabled"
|
||||
return
|
||||
try:
|
||||
while true:
|
||||
if node.wakuKademlia.isNil():
|
||||
info "extended kademlia discovery loop stopping: protocol disabled"
|
||||
return
|
||||
|
||||
if not node.started:
|
||||
await sleepAsync(ExtendedKademliaDiscoveryStartupDelay)
|
||||
continue
|
||||
|
||||
var records: seq[ExtendedPeerRecord]
|
||||
try:
|
||||
records = await node.wakuKademlia.randomRecords()
|
||||
except CatchableError:
|
||||
warn "extended kademlia discovery failed", error = getCurrentExceptionMsg()
|
||||
await sleepAsync(interval)
|
||||
continue
|
||||
|
||||
debug "received random records from kademlia", numRecords = records.len
|
||||
|
||||
var added = 0
|
||||
for record in records:
|
||||
let peerOpt = remotePeerInfoFrom(record)
|
||||
if peerOpt.isNone():
|
||||
if not node.started:
|
||||
await sleepAsync(ExtendedKademliaDiscoveryStartupDelay)
|
||||
continue
|
||||
|
||||
let peerInfo = peerOpt.get()
|
||||
node.peerManager.addPeer(peerInfo, PeerOrigin.Kademlia)
|
||||
debug "peer added via extended kademlia discovery",
|
||||
peerId = $peerInfo.peerId,
|
||||
addresses = peerInfo.addrs.mapIt($it),
|
||||
protocols = peerInfo.protocols,
|
||||
hasMixPubKey = peerInfo.mixPubKey.isSome()
|
||||
added.inc()
|
||||
var records: seq[ExtendedPeerRecord]
|
||||
try:
|
||||
records = await node.wakuKademlia.randomRecords()
|
||||
except CatchableError:
|
||||
warn "extended kademlia discovery failed", error = getCurrentExceptionMsg()
|
||||
await sleepAsync(interval)
|
||||
continue
|
||||
|
||||
if added > 0:
|
||||
info "added peers from extended kademlia discovery", count = added
|
||||
debug "received random records from kademlia", numRecords = records.len
|
||||
|
||||
await sleepAsync(interval)
|
||||
var added = 0
|
||||
for record in records:
|
||||
let peerOpt = remotePeerInfoFrom(record)
|
||||
if peerOpt.isNone():
|
||||
continue
|
||||
|
||||
let peerInfo = peerOpt.get()
|
||||
node.peerManager.addPeer(peerInfo, PeerOrigin.Kademlia)
|
||||
debug "peer added via extended kademlia discovery",
|
||||
peerId = $peerInfo.peerId,
|
||||
addresses = peerInfo.addrs.mapIt($it),
|
||||
protocols = peerInfo.protocols,
|
||||
hasMixPubKey = peerInfo.mixPubKey.isSome()
|
||||
added.inc()
|
||||
|
||||
if added > 0:
|
||||
info "added peers from extended kademlia discovery", count = added
|
||||
|
||||
await sleepAsync(interval)
|
||||
except CancelledError:
|
||||
debug "extended kademlia discovery loop cancelled"
|
||||
except CatchableError as e:
|
||||
error "extended kademlia discovery loop failed", error = e.msg
|
||||
|
||||
proc startExtendedKademliaDiscoveryLoop*(
|
||||
node: WakuNode, interval = DefaultExtendedKademliaDiscoveryInterval
|
||||
@ -185,9 +194,7 @@ proc startExtendedKademliaDiscoveryLoop*(
|
||||
|
||||
node.kademliaDiscoveryLoop = node.runExtendedKademliaDiscoveryLoop(interval)
|
||||
|
||||
proc lookupMixPeers*(
|
||||
node: WakuNode
|
||||
): Future[int] {.async.} =
|
||||
proc lookupMixPeers*(node: WakuNode): Future[int] {.async.} =
|
||||
## Lookup mix peers via kademlia and add them to the peer store.
|
||||
## Returns the number of mix peers found and added.
|
||||
if node.wakuKademlia.isNil():
|
||||
@ -216,8 +223,7 @@ proc lookupMixPeers*(
|
||||
|
||||
node.peerManager.addPeer(peerInfo, PeerOrigin.Kademlia)
|
||||
info "mix peer added via kademlia lookup",
|
||||
peerId = $peerInfo.peerId,
|
||||
mixPubKey = peerInfo.mixPubKey.get().toHex()
|
||||
peerId = $peerInfo.peerId, mixPubKey = peerInfo.mixPubKey.get().toHex()
|
||||
added.inc()
|
||||
|
||||
info "mix peer lookup complete", found = added
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user