Pubsub remove dictionary direct access in _get_in_topic_gossipsub_peers_from_minus in favor of get() #1116
+2
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What was wrong?
Issue
#1124
There is a race condition in gossipsub.py. When a peer disconnects, it is removed from
peer_protocolimmediately. However, the heartbeat loop (which runs every 0.5s or so) might still have that peer in its list of candidates. The code is trying to accessself.peer_protocol[peer_id]blindly, assuming that if a peer is known it must have protocol info, which leads to a crash when it’s missing.Logs
How was it fixed?
In
Pubsub._get_in_topic_gossipsub_peers_from_minusto useself.peer_protocol.get(peer_id)instead of direct dictionary access viaself.peer_protocol[peer_id]. This safely ignores peers that are partially disconnected during the heartbeat cycle.Summary of approach.
Use
dict.get()to possibly returnNone, instead of directly trying to access the element in a dictionary.To-Do
Cute Animal Picture