GossipSub: remove peer if we can't establish sendConn (#886)

This commit is contained in:
Tanguy 2023-06-14 17:23:39 +02:00 committed by GitHub
parent 67711478ce
commit a65b7b028f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 8 additions and 3 deletions

View File

@ -171,7 +171,7 @@ proc connectOnce(p: PubSubPeer): Future[void] {.async.} =
try: try:
if p.connectedFut.finished: if p.connectedFut.finished:
p.connectedFut = newFuture[void]() p.connectedFut = newFuture[void]()
let newConn = await p.getConn() let newConn = await p.getConn().wait(5.seconds)
if newConn.isNil: if newConn.isNil:
raise (ref LPError)(msg: "Cannot establish send connection") raise (ref LPError)(msg: "Cannot establish send connection")
@ -198,6 +198,9 @@ proc connectOnce(p: PubSubPeer): Future[void] {.async.} =
await p.sendConn.close() await p.sendConn.close()
p.sendConn = nil p.sendConn = nil
if not p.connectedFut.finished:
p.connectedFut.complete()
try: try:
if p.onEvent != nil: if p.onEvent != nil:
p.onEvent(p, PubSubPeerEvent(kind: PubSubPeerEventKind.Disconnected)) p.onEvent(p, PubSubPeerEvent(kind: PubSubPeerEventKind.Disconnected))
@ -246,11 +249,13 @@ proc sendEncoded*(p: PubSubPeer, msg: seq[byte]) {.raises: [], async.} =
return return
if p.sendConn == nil: if p.sendConn == nil:
discard await p.connectedFut.withTimeout(1.seconds) # Wait for a send conn to be setup. `connectOnce` will
# complete this even if the sendConn setup failed
await p.connectedFut
var conn = p.sendConn var conn = p.sendConn
if conn == nil or conn.closed(): if conn == nil or conn.closed():
debug "No send connection, skipping message", p, msg = shortLog(msg) debug "No send connection", p, msg = shortLog(msg)
return return
trace "sending encoded msgs to peer", conn, encoded = shortLog(msg) trace "sending encoded msgs to peer", conn, encoded = shortLog(msg)