Handle StreamClosed in pub/gossip/flood-sub

This commit is contained in:
NIC619
2019-11-12 18:10:41 +08:00
parent c4f9ce6bb3
commit 9be9b4bbfc
3 changed files with 27 additions and 5 deletions

View File

@ -4,6 +4,7 @@ import logging
import random
from typing import Any, Dict, Iterable, List, Sequence, Set
from libp2p.network.stream.exceptions import StreamClosed
from libp2p.peer.id import ID
from libp2p.pubsub import floodsub
from libp2p.typing import TProtocol
@ -188,7 +189,12 @@ class GossipSub(IPubsubRouter):
# FIXME: We should add a `WriteMsg` similar to write delimited messages.
# Ref: https://github.com/libp2p/go-libp2p-pubsub/blob/master/comm.go#L107
# TODO: Go use `sendRPC`, which possibly piggybacks gossip/control messages.
await stream.write(encode_varint_prefixed(rpc_msg.SerializeToString()))
try:
await stream.write(encode_varint_prefixed(rpc_msg.SerializeToString()))
except StreamClosed:
logger.debug("Fail to publish message to %s: stream closed", peer_id)
# TODO: also remove peer info from pubsub
self.remove_peer(peer_id)
def _get_peers_to_send(
self, topic_ids: Iterable[str], msg_forwarder: ID, origin: ID