From d73f313e2220fc0746575cac587c8f4234f61793 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Fri, 19 Mar 2021 12:27:38 -0700 Subject: [PATCH] fix: DRY direct connect logic --- swarm.go | 11 +++++++++++ swarm_dial.go | 29 +++++++---------------------- 2 files changed, 18 insertions(+), 22 deletions(-) diff --git a/swarm.go b/swarm.go index 7a241b4..3b3cf83 100644 --- a/swarm.go +++ b/swarm.go @@ -439,6 +439,17 @@ func (s *Swarm) bestConnToPeer(p peer.ID) *Conn { return best } +func (s *Swarm) bestAcceptableConnToPeer(ctx context.Context, p peer.ID) *Conn { + conn := s.bestConnToPeer(p) + if conn != nil { + forceDirect, _ := network.GetForceDirectDial(ctx) + if !forceDirect || isDirectConn(conn) { + return conn + } + } + return nil +} + func isDirectConn(c *Conn) bool { return c != nil && !c.conn.Transport().Proxy() } diff --git a/swarm_dial.go b/swarm_dial.go index 052da67..ccf33c2 100644 --- a/swarm_dial.go +++ b/swarm_dial.go @@ -251,14 +251,9 @@ func (s *Swarm) dialPeer(ctx context.Context, p peer.ID) (*Conn, error) { defer log.EventBegin(ctx, "swarmDialAttemptSync", p).Done() - conn := s.bestConnToPeer(p) - forceDirect, _ := network.GetForceDirectDial(ctx) - if forceDirect { - if isDirectConn(conn) { - return conn, nil - } - } else if conn != nil { - // check if we already have an open connection first + // check if we already have an open (usable) connection first + conn := s.bestAcceptableConnToPeer(ctx, p) + if conn != nil { return conn, nil } @@ -292,13 +287,8 @@ func (s *Swarm) doDial(ctx context.Context, p peer.ID) (*Conn, error) { // Short circuit. // By the time we take the dial lock, we may already *have* a connection // to the peer. - forceDirect, _ := network.GetForceDirectDial(ctx) - c := s.bestConnToPeer(p) - if forceDirect { - if isDirectConn(c) { - return c, nil - } - } else if c != nil { + c := s.bestAcceptableConnToPeer(ctx, p) + if c != nil { return c, nil } @@ -310,13 +300,8 @@ func (s *Swarm) doDial(ctx context.Context, p peer.ID) (*Conn, error) { conn, err := s.dial(ctx, p) if err != nil { - conn = s.bestConnToPeer(p) - if forceDirect { - if isDirectConn(conn) { - log.Debugf("ignoring dial error because we already have a direct connection: %s", err) - return conn, nil - } - } else if conn != nil { + conn := s.bestAcceptableConnToPeer(ctx, p) + if conn != nil { // Hm? What error? // Could have canceled the dial because we received a // connection or some other random reason. -- GitLab