6767 # Task for processing non-priority message queue.
6868 sendNonPriorityTask: Future [void ]
6969 # The max duration a message to be relayed can wait to be sent before it is dropped. The default is 500ms.
70- maxDurationInNonPriorityQueue: Duration
70+ maxDurationInNonPriorityQueue* : Opt [ Duration ]
7171
7272 PubSubPeer * = ref object of RootObj
7373 getConn* : GetConn # callback to establish a new send connection
9090 behaviourPenalty* : float64 # the eventual penalty score
9191 overheadRateLimitOpt* : Opt [TokenBucket ]
9292
93- rpcmessagequeue: RpcMessageQueue
93+ rpcmessagequeue* : RpcMessageQueue
9494
9595 RPCHandler * = proc (peer: PubSubPeer , data: seq [byte ]): Future [void ]
9696 {.gcsafe , raises : [].}
@@ -388,10 +388,11 @@ proc sendNonPriorityTask(p: PubSubPeer) {.async.} =
388388 let ttlMsg = await p.rpcmessagequeue.nonPriorityQueue.popFirst ()
389389 when defined (libp2p_expensive_metrics):
390390 libp2p_gossipsub_non_priority_queue_size.dec (labelValues = [$ p.peerId])
391- if Moment .now () - ttlMsg.addedAt >= p.rpcmessagequeue.maxDurationInNonPriorityQueue:
392- when defined (libp2p_expensive_metrics):
393- libp2p_gossipsub_non_priority_msgs_dropped.inc (labelValues = [$ p.peerId])
394- continue
391+ p.rpcmessagequeue.maxDurationInNonPriorityQueue.withValue (maxDurationInNonPriorityQueue):
392+ if Moment .now () - ttlMsg.addedAt >= maxDurationInNonPriorityQueue:
393+ when defined (libp2p_expensive_metrics):
394+ libp2p_gossipsub_non_priority_msgs_dropped.inc (labelValues = [$ p.peerId])
395+ continue
395396 await p.sendMsg (ttlMsg.msg)
396397
397398proc startSendNonPriorityTask (p: PubSubPeer ) =
@@ -410,7 +411,7 @@ proc stopSendNonPriorityTask*(p: PubSubPeer) =
410411 libp2p_gossipsub_priority_queue_size.set (labelValues = [$ p.peerId], value = 0 )
411412 libp2p_gossipsub_non_priority_queue_size.set (labelValues = [$ p.peerId], value = 0 )
412413
413- proc new (T: typedesc [RpcMessageQueue ], maxDurationInNonPriorityQueue = 1 .seconds ): T =
414+ proc new (T: typedesc [RpcMessageQueue ], maxDurationInNonPriorityQueue = Opt . none ( Duration ) ): T =
414415 return T (
415416 sendPriorityQueue: initDeque [Future [void ]](),
416417 nonPriorityQueue: newAsyncQueue [QueuedMessage ](),
@@ -424,7 +425,8 @@ proc new*(
424425 onEvent: OnEvent ,
425426 codec: string ,
426427 maxMessageSize: int ,
427- overheadRateLimitOpt: Opt [TokenBucket ] = Opt .none (TokenBucket )): T =
428+ overheadRateLimitOpt: Opt [TokenBucket ] = Opt .none (TokenBucket ),
429+ maxDurationInNonPriorityQueue = Opt .none (Duration )): T =
428430
429431 result = T (
430432 getConn: getConn,
@@ -434,7 +436,7 @@ proc new*(
434436 connectedFut: newFuture [void ](),
435437 maxMessageSize: maxMessageSize,
436438 overheadRateLimitOpt: overheadRateLimitOpt,
437- rpcmessagequeue: RpcMessageQueue .new (),
439+ rpcmessagequeue: RpcMessageQueue .new (maxDurationInNonPriorityQueue ),
438440 )
439441 result .sentIHaves.addFirst (default (HashSet [MessageId ]))
440442 result .heDontWants.addFirst (default (HashSet [MessageId ]))
0 commit comments