From c42f8b6a66e7078e31aceee76d47c09ddc1de8b4 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Tue, 6 Jul 2021 11:51:21 -0700 Subject: [PATCH 1/2] remove unneeded handleReserve function parameter --- v2/relay/relay.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/v2/relay/relay.go b/v2/relay/relay.go index f1fa5ad..c22277d 100644 --- a/v2/relay/relay.go +++ b/v2/relay/relay.go @@ -120,7 +120,7 @@ func (r *Relay) handleStream(s network.Stream) { switch msg.GetType() { case pbv2.HopMessage_RESERVE: - r.handleReserve(s, &msg) + r.handleReserve(s) case pbv2.HopMessage_CONNECT: r.handleConnect(s, &msg) @@ -130,7 +130,7 @@ func (r *Relay) handleStream(s network.Stream) { } } -func (r *Relay) handleReserve(s network.Stream, msg *pbv2.HopMessage) { +func (r *Relay) handleReserve(s network.Stream) { defer s.Close() p := s.Conn().RemotePeer() From 958f5099e4ded97ffe92062aafc88187bc5ff269 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Tue, 6 Jul 2021 12:34:47 -0700 Subject: [PATCH 2/2] remove rollback logic when writing reservation fails --- v2/relay/relay.go | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/v2/relay/relay.go b/v2/relay/relay.go index c22277d..8ef4e49 100644 --- a/v2/relay/relay.go +++ b/v2/relay/relay.go @@ -175,15 +175,12 @@ func (r *Relay) handleReserve(s network.Stream) { log.Debugf("reserving relay slot for %s", p) - err := r.writeResponse(s, pbv2.Status_OK, r.makeReservationMsg(p, expire), r.makeLimitMsg(p)) - if err != nil { - s.Reset() + // Delivery of the reservation might fail for a number of reasons. + // For example, the stream might be reset or the connection might be closed before the reservation is received. + // In that case, the reservation will just be garbage collected later. + if err := r.writeResponse(s, pbv2.Status_OK, r.makeReservationMsg(p, expire), r.makeLimitMsg(p)); err != nil { log.Debugf("error writing reservation response; retracting reservation for %s", p) - r.mx.Lock() - delete(r.rsvp, p) - r.ipcs.RemoveReservation(p) - r.host.ConnManager().UntagPeer(p, "relay-reservation") - r.mx.Unlock() + s.Reset() } }