From fec507e7559d7f26b750cffa29a373e03fd42ecd Mon Sep 17 00:00:00 2001 From: Giovanni Petrantoni Date: Thu, 9 Jul 2020 02:06:26 +0900 Subject: [PATCH] Add peers back to gossipsub table, slow down heartbeat (#256) * Add peers back to gossipsub table, slow down heartbeat * exclude on unsub from mesh and fanout --- libp2p/protocols/pubsub/gossipsub.nim | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/libp2p/protocols/pubsub/gossipsub.nim b/libp2p/protocols/pubsub/gossipsub.nim index f6a4a2eb7..d2efad55b 100644 --- a/libp2p/protocols/pubsub/gossipsub.nim +++ b/libp2p/protocols/pubsub/gossipsub.nim @@ -168,6 +168,7 @@ proc rebalanceMesh(g: GossipSub, topic: string) {.async.} = # send a graft message to the peer await p.sendPrune(@[topic]) g.mesh[topic].excl(id) + g.gossipsub[topic].incl(id) libp2p_gossipsub_peers_per_topic_gossipsub .set(g.gossipsub.getOrDefault(topic).len.int64, @@ -274,7 +275,7 @@ proc heartbeat(g: GossipSub) {.async.} = except CatchableError as exc: trace "exception ocurred in gossipsub heartbeat", exc = exc.msg - await sleepAsync(1.seconds) + await sleepAsync(5.seconds) method handleDisconnect*(g: GossipSub, peer: PubSubPeer) = ## handle peer disconnects @@ -323,6 +324,10 @@ method subscribeTopic*(g: GossipSub, trace "removing subscription for topic", peer = peerId, name = topic # unsubscribe remote peer from the topic g.gossipsub[topic].excl(peerId) + if peerId in g.mesh.getOrDefault(topic): + g.mesh[topic].excl(peerId) + if peerId in g.fanout.getOrDefault(topic): + g.fanout[topic].excl(peerId) libp2p_gossipsub_peers_per_topic_gossipsub .set(g.gossipsub[topic].len.int64, labelValues = [topic]) @@ -362,6 +367,7 @@ proc handlePrune(g: GossipSub, peer: PubSubPeer, prunes: seq[ControlPrune]) = if prune.topicID in g.mesh: g.mesh[prune.topicID].excl(peer.id) + g.gossipsub[prune.topicID].incl(peer.id) libp2p_gossipsub_peers_per_topic_mesh .set(g.mesh[prune.topicID].len.int64, labelValues = [prune.topicID])