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..35eea7d85 100644 --- a/nomad/node_endpoint_test.go +++ b/nomad/node_endpoint_test.go @@ -917,6 +917,21 @@ 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.NoError(err) + 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.NoError(err) + require.Len(out.Events, 3) } func TestClientEndpoint_UpdateDrain_ACL(t *testing.T) {