Skip to content
This repository has been archived by the owner on May 26, 2022. It is now read-only.

Commit

Permalink
fix: DRY direct connect logic
Browse files Browse the repository at this point in the history
  • Loading branch information
Stebalien committed Mar 19, 2021
1 parent 1dde927 commit d73f313
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 22 deletions.
11 changes: 11 additions & 0 deletions swarm.go
Original file line number Diff line number Diff line change
Expand Up @@ -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()
}
Expand Down
29 changes: 7 additions & 22 deletions swarm_dial.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down Expand Up @@ -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
}

Expand All @@ -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.
Expand Down

0 comments on commit d73f313

Please sign in to comment.