Merge pull request #4383 from hashicorp/b-node-drain-empty-event

nomad: handle edge case where node drain event shouldn't be emitted
This commit is contained in:
Nick Ethier
2018-06-06 14:21:28 -04:00
committed by GitHub
2 changed files with 17 additions and 0 deletions

View File

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

View File

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