diff --git a/nomad/client_rpc.go b/nomad/client_rpc.go index fb47ed325..5a3498de7 100644 --- a/nomad/client_rpc.go +++ b/nomad/client_rpc.go @@ -42,6 +42,7 @@ func (s *Server) getNodeConn(nodeID string) (*nodeConnState, bool) { // Shouldn't happen but rather be safe if state == nil { + s.logger.Printf("[WARN] nomad.client_rpc: node %q exists in node connection map without any connection", nodeID) return nil, false } @@ -113,20 +114,20 @@ func (s *Server) removeNodeConn(ctx *RPCContext) { // dial various addresses that all route to the same server. The most common // case for this is the original address the client uses to connect to the // server differs from the advertised address sent by the heartbeat. - numConns := len(conns) - found := false for i, conn := range conns { if conn.Ctx.Conn.LocalAddr().String() == ctx.Conn.LocalAddr().String() && conn.Ctx.Conn.RemoteAddr().String() == ctx.Conn.RemoteAddr().String() { - s.nodeConns[ctx.NodeID] = append(s.nodeConns[ctx.NodeID][:i], s.nodeConns[ctx.NodeID][i+1:]...) - found = true - break - } - } - // If we just deleted the last conn, remove it from the map - if found && numConns == 1 { - delete(s.nodeConns, ctx.NodeID) + if len(conns) == 1 { + // We are deleting the last conn, remove it from the map + delete(s.nodeConns, ctx.NodeID) + } else { + // Slice out the connection we are deleting + s.nodeConns[ctx.NodeID] = append(s.nodeConns[ctx.NodeID][:i], s.nodeConns[ctx.NodeID][i+1:]...) + } + + return + } } }