From de6199ac4521c213cb0f68dc102a472876a74fcd Mon Sep 17 00:00:00 2001 From: Chelsea Holland Komlo Date: Wed, 7 Mar 2018 18:54:52 -0500 Subject: [PATCH] move adding node registration event to the state store --- nomad/node_endpoint.go | 10 ---------- nomad/state/events_state_store_test.go | 11 +++++++++-- nomad/state/state_store.go | 11 +++++++++++ 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/nomad/node_endpoint.go b/nomad/node_endpoint.go index 176d79dd2..3cefa026e 100644 --- a/nomad/node_endpoint.go +++ b/nomad/node_endpoint.go @@ -129,16 +129,6 @@ func (n *Node) Register(args *structs.NodeRegisterRequest, reply *structs.NodeUp if args.Node.SecretID != originalNode.SecretID && originalNode.SecretID != "" { return fmt.Errorf("node secret ID does not match. Not registering node.") } - } else { - // Because this is the first time the node is being registered, we should - // also create a node registration event - nodeEvent := &structs.NodeEvent{ - Message: "Node Registered", - Subsystem: "Server", - Timestamp: time.Now().Unix(), - } - args.Node.NodeEvents = make([]*structs.NodeEvent, 0) - args.Node.NodeEvents = append(args.Node.NodeEvents, nodeEvent) } // We have a valid node connection, so add the mapping to cache the diff --git a/nomad/state/events_state_store_test.go b/nomad/state/events_state_store_test.go index a44de1ed0..f9fbd764d 100644 --- a/nomad/state/events_state_store_test.go +++ b/nomad/state/events_state_store_test.go @@ -16,10 +16,14 @@ func TestStateStore_AddSingleNodeEvent(t *testing.T) { node := mock.Node() + // We create a new node event every time we register a node err := state.UpsertNode(1000, node) if err != nil { t.Fatalf("err: %v", err) } + require.Equal(1, len(node.NodeEvents)) + require.Equal(structs.Subsystem("Server"), node.NodeEvents[0].Subsystem) + require.Equal("Node Registered", node.NodeEvents[0].Message) nodeEvent := &structs.NodeEvent{ Message: "failed", @@ -32,8 +36,8 @@ func TestStateStore_AddSingleNodeEvent(t *testing.T) { ws := memdb.NewWatchSet() actualNode, err := state.NodeByID(ws, node.ID) require.Nil(err) - require.Equal(1, len(actualNode.NodeEvents)) - require.Equal(nodeEvent, actualNode.NodeEvents[0]) + require.Equal(2, len(actualNode.NodeEvents)) + require.Equal(nodeEvent, actualNode.NodeEvents[1]) } // To prevent stale node events from accumulating, we limit the number of @@ -48,6 +52,9 @@ func TestStateStore_NodeEvents_RetentionWindow(t *testing.T) { if err != nil { t.Fatalf("err: %v", err) } + require.Equal(1, len(node.NodeEvents)) + require.Equal(structs.Subsystem("Server"), node.NodeEvents[0].Subsystem) + require.Equal("Node Registered", node.NodeEvents[0].Message) for i := 1; i <= 20; i++ { nodeEvent := &structs.NodeEvent{ diff --git a/nomad/state/state_store.go b/nomad/state/state_store.go index 8afb9af55..41523f749 100644 --- a/nomad/state/state_store.go +++ b/nomad/state/state_store.go @@ -527,6 +527,17 @@ func (s *StateStore) UpsertNode(index uint64, node *structs.Node) error { node.ModifyIndex = index node.Drain = exist.Drain // Retain the drain mode } else { + // Because this is the first time the node is being registered, we should + // also create a node registration event + nodeEvent := &structs.NodeEvent{ + Message: "Node Registered", + Subsystem: "Server", + Timestamp: node.StatusUpdatedAt, + } + + node.NodeEvents = make([]*structs.NodeEvent, 0) + node.NodeEvents = append(node.NodeEvents, nodeEvent) + node.CreateIndex = index node.ModifyIndex = index }