From e7136f80c5c1277ea2dea4eeeda84005224d7835 Mon Sep 17 00:00:00 2001 From: Daniel Bennett Date: Tue, 3 Oct 2023 12:03:20 -0500 Subject: [PATCH] scaling: set Index on nil-job scale status reply (#18637) returning a nil error in a blockingOptions.run() without increasing the reply Index can cause the query to block indefinitely (until timeout). this fixes that happening in Job.ScaleStatus when the job is deleted -- the job going away should now return as not-found and provide a new index for the caller to try if they so please. --- .changelog/18637.txt | 3 +++ nomad/job_endpoint.go | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 .changelog/18637.txt diff --git a/.changelog/18637.txt b/.changelog/18637.txt new file mode 100644 index 00000000000..aaa01ad4a5f --- /dev/null +++ b/.changelog/18637.txt @@ -0,0 +1,3 @@ +```release-note:bug +scaling: Unblock blocking queries to /v1/job/{job-id}/scale if the job goes away +``` diff --git a/nomad/job_endpoint.go b/nomad/job_endpoint.go index bfa59769364..11552adc4ba 100644 --- a/nomad/job_endpoint.go +++ b/nomad/job_endpoint.go @@ -2216,8 +2216,13 @@ func (j *Job) ScaleStatus(args *structs.JobScaleStatusRequest, return err } if job == nil { + // HTTPServer.jobScaleStatus() will 404 if this is nil reply.JobScaleStatus = nil - return nil + + // reply with latest index, since if the job does get created, + // it must necessarily be later than current latest. + reply.Index, err = state.LatestIndex() + return err } events, eventsIndex, err := state.ScalingEventsByJob(ws, args.RequestNamespace(), args.JobID)