From e2bfdf0c103442af8da12c800a3a003c586cf01b Mon Sep 17 00:00:00 2001 From: Luiz Aoqui Date: Fri, 9 Feb 2024 18:19:33 -0500 Subject: [PATCH] events: emit event when job is deleted (#19903) When jobs are deregistered with the `purge` flag they are immediately deleted from the state store instead of just updated to be marked as stopped. Without tracking job deletions the event stream would not receive a `JobDeregistered` event when `purge` was set. --- .changelog/19903.txt | 3 +++ nomad/state/events.go | 13 +++++++++++++ nomad/state/events_test.go | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 .changelog/19903.txt diff --git a/.changelog/19903.txt b/.changelog/19903.txt new file mode 100644 index 000000000..036c89b1b --- /dev/null +++ b/.changelog/19903.txt @@ -0,0 +1,3 @@ +```release-note:improvement +api: emit `JobDeregistered` event when job is deregistered with `purge` +``` diff --git a/nomad/state/events.go b/nomad/state/events.go index 798d1ec48..c338133c4 100644 --- a/nomad/state/events.go +++ b/nomad/state/events.go @@ -125,6 +125,19 @@ func eventFromChange(change memdb.Change) (structs.Event, bool) { ACLBindingRule: before, }, }, true + case "jobs": + before, ok := change.Before.(*structs.Job) + if !ok { + return structs.Event{}, false + } + return structs.Event{ + Topic: structs.TopicJob, + Key: before.ID, + Namespace: before.Namespace, + Payload: &structs.JobEvent{ + Job: before, + }, + }, true case "nodes": before, ok := change.Before.(*structs.Node) if !ok { diff --git a/nomad/state/events_test.go b/nomad/state/events_test.go index e7ce6b1ce..8e15e27fb 100644 --- a/nomad/state/events_test.go +++ b/nomad/state/events_test.go @@ -726,7 +726,7 @@ func TestEventsFromChanges_WithDeletion(t *testing.T) { event := eventsFromChanges(nil, changes) require.NotNil(t, event) - require.Len(t, event.Events, 1) + require.Len(t, event.Events, 2) } func TestEventsFromChanges_WithNodeDeregistration(t *testing.T) {