From 743e78c04d22e85f900c8fa2b8ded5adf513c3af Mon Sep 17 00:00:00 2001 From: SionoiS Date: Thu, 5 Oct 2023 08:25:37 -0400 Subject: [PATCH] Added timeout & missing call to disco --- waku/waku_api/handlers.nim | 7 ++++++- waku/waku_api/rest/filter/handlers.nim | 25 +++++++++++++++++-------- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/waku/waku_api/handlers.nim b/waku/waku_api/handlers.nim index f193b5d4e5..f5f59ca37e 100644 --- a/waku/waku_api/handlers.nim +++ b/waku/waku_api/handlers.nim @@ -21,7 +21,12 @@ type DiscoveryHandler* = proc(): Future[Result[Option[RemotePeerInfo], string]] proc defaultDiscoveryHandler*(discv5: WakuDiscoveryV5, cap: Capabilities): DiscoveryHandler = proc(): Future[Result[Option[RemotePeerInfo], string]] {.async, closure.} = #Discv5 is already filtering peers by shards no need to pass a predicate. - var peers = await discv5.findRandomPeers() + let findPeers = discv5.findRandomPeers() + + if not await findPeers.withTimeout(60.seconds): + return err("Discovery process out!") + + var peers = findPeers.read() peers.keepItIf(it.supportsCapability(cap)) diff --git a/waku/waku_api/rest/filter/handlers.nim b/waku/waku_api/rest/filter/handlers.nim index de4beb4723..20b4a2e925 100644 --- a/waku/waku_api/rest/filter/handlers.nim +++ b/waku/waku_api/rest/filter/handlers.nim @@ -161,14 +161,23 @@ proc filterPostPutSubscriptionRequestHandler( let req: FilterSubscribeRequest = decodedBody.value() - let peerOpt = node.peerManager.selectPeer(WakuFilterSubscribeCodec) - - if peerOpt.isNone(): - return makeRestResponse(req.requestId, FilterSubscribeError.serviceUnavailable("No suitable peers")) - - let subFut = node.filterSubscribe(req.pubsubTopic, - req.contentFilters, - peerOpt.get()) + let peer = node.peerManager.selectPeer(WakuFilterSubscribeCodec).valueOr: + let handler = discHandler.valueOr: + return makeRestResponse( + req.requestId, + FilterSubscribeError.serviceUnavailable("No suitable peers") + ) + + let peerOp = (await handler()).valueOr: + return RestApiResponse.internalServerError($error) + + peerOp.valueOr: + return makeRestResponse( + req.requestId, + FilterSubscribeError.serviceUnavailable("No suitable peers") + ) + + let subFut = node.filterSubscribe(req.pubsubTopic, req.contentFilters, peer) if not await subFut.withTimeout(futTimeoutForSubscriptionProcessing): error "Failed to subscribe to contentFilters do to timeout!"