Skip to content

Commit

Permalink
Merge pull request #4231 from hashicorp/b-no-node-panic
Browse files Browse the repository at this point in the history
Fix issue where node connection map wasn't being pruned
  • Loading branch information
dadgar committed Apr 27, 2018
2 parents 5066268 + 5cd1ff4 commit e44600a
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 1 deletion.
16 changes: 15 additions & 1 deletion nomad/client_rpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,12 @@ 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
}

return state, ok
}

Expand Down Expand Up @@ -111,7 +117,15 @@ func (s *Server) removeNodeConn(ctx *RPCContext) {
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:]...)

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
}
}
Expand Down
3 changes: 3 additions & 0 deletions nomad/client_rpc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,9 @@ func TestServer_removeNodeConn_differentAddrs(t *testing.T) {
// Delete the second
s1.removeNodeConn(ctx2)
require.Len(s1.connectedNodes(), 0)

_, ok = s1.getNodeConn(nodeID)
require.False(ok)
}

func TestServerWithNodeConn_NoPath(t *testing.T) {
Expand Down

0 comments on commit e44600a

Please sign in to comment.