Merge pull request #4231 from hashicorp/b-no-node-panic

Fix issue where node connection map wasn't being pruned
This commit is contained in:
Alex Dadgar
2018-04-27 10:38:35 -07:00
committed by GitHub
2 changed files with 18 additions and 1 deletions

View File

@@ -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
}
@@ -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
}
}

View File

@@ -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) {