From 93f9e073aa752934c14812a65f783ff3f5f13559 Mon Sep 17 00:00:00 2001 From: Nick Ethier Date: Wed, 6 Jun 2018 14:02:10 -0400 Subject: [PATCH 1/2] nomad: handle edge case where node drain event shouldn't be emitted --- nomad/node_endpoint.go | 2 ++ nomad/node_endpoint_test.go | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/nomad/node_endpoint.go b/nomad/node_endpoint.go index 4fd22c0da..9bc5fdfb4 100644 --- a/nomad/node_endpoint.go +++ b/nomad/node_endpoint.go @@ -504,6 +504,8 @@ func (n *Node) UpdateDrain(args *structs.NodeUpdateDrainRequest, args.NodeEvent.SetMessage(NodeDrainEventDrainUpdated) } else if node.DrainStrategy != nil && args.DrainStrategy == nil { args.NodeEvent.SetMessage(NodeDrainEventDrainDisabled) + } else { + args.NodeEvent = nil } // Commit this update via Raft diff --git a/nomad/node_endpoint_test.go b/nomad/node_endpoint_test.go index 64a2ab17d..f72208771 100644 --- a/nomad/node_endpoint_test.go +++ b/nomad/node_endpoint_test.go @@ -917,6 +917,19 @@ func TestClientEndpoint_UpdateDrain(t *testing.T) { require.NotZero(resp3.Index) require.NotZero(resp3.EvalCreateIndex) require.Len(resp3.EvalIDs, 1) + + // Check for updated node in the FSM + ws = memdb.NewWatchSet() + out, err = state.NodeByID(ws, node.ID) + require.Len(out.Events, 3) + require.Equal(NodeDrainEventDrainDisabled, out.Events[2].Message) + + // Check that calling UpdateDrain with the same DrainStrategy does not emit + // a node event. + require.Nil(msgpackrpc.CallWithCodec(codec, "Node.UpdateDrain", dereg, &resp3)) + ws = memdb.NewWatchSet() + out, err = state.NodeByID(ws, node.ID) + require.Len(out.Events, 3) } func TestClientEndpoint_UpdateDrain_ACL(t *testing.T) { From d4e86722fecf7933b6007dff540055e4e426d852 Mon Sep 17 00:00:00 2001 From: Nick Ethier Date: Wed, 6 Jun 2018 14:08:42 -0400 Subject: [PATCH 2/2] nomad: add error check in test --- nomad/node_endpoint_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nomad/node_endpoint_test.go b/nomad/node_endpoint_test.go index f72208771..35eea7d85 100644 --- a/nomad/node_endpoint_test.go +++ b/nomad/node_endpoint_test.go @@ -921,6 +921,7 @@ func TestClientEndpoint_UpdateDrain(t *testing.T) { // Check for updated node in the FSM ws = memdb.NewWatchSet() out, err = state.NodeByID(ws, node.ID) + require.NoError(err) require.Len(out.Events, 3) require.Equal(NodeDrainEventDrainDisabled, out.Events[2].Message) @@ -929,6 +930,7 @@ func TestClientEndpoint_UpdateDrain(t *testing.T) { require.Nil(msgpackrpc.CallWithCodec(codec, "Node.UpdateDrain", dereg, &resp3)) ws = memdb.NewWatchSet() out, err = state.NodeByID(ws, node.ID) + require.NoError(err) require.Len(out.Events, 3) }