diff --git a/nomad/state/state_store.go b/nomad/state/state_store.go index c68501077..fc3089999 100644 --- a/nomad/state/state_store.go +++ b/nomad/state/state_store.go @@ -4160,7 +4160,7 @@ func (s *StateSnapshot) DenormalizeAllocationSlice(allocs []*structs.Allocation, // DenormalizeAllocationDiffSlice queries the Allocation for each AllocationDiff and merges // the updated attributes with the existing Allocation, and attaches the Job provided -func (s *StateSnapshot) DenormalizeAllocationDiffSlice(allocDiffs []*structs.AllocationDiff, job *structs.Job) ([]*structs.Allocation, error) { +func (s *StateSnapshot) DenormalizeAllocationDiffSlice(allocDiffs []*structs.AllocationDiff, planJob *structs.Job) ([]*structs.Allocation, error) { // Output index for denormalized Allocations j := 0 @@ -4176,15 +4176,16 @@ func (s *StateSnapshot) DenormalizeAllocationDiffSlice(allocDiffs []*structs.All // Merge the updates to the Allocation allocCopy := alloc.CopySkipJob() - allocCopy.Job = job if allocDiff.PreemptedByAllocation != "" { - // If alloc is a preemption + // If alloc is a preemption set the job from the alloc read from the state store + allocCopy.Job = alloc.Job.Copy() allocCopy.PreemptedByAllocation = allocDiff.PreemptedByAllocation allocCopy.DesiredDescription = getPreemptedAllocDesiredDescription(allocDiff.PreemptedByAllocation) allocCopy.DesiredStatus = structs.AllocDesiredStatusEvict } else { // If alloc is a stopped alloc + allocCopy.Job = planJob allocCopy.DesiredDescription = allocDiff.DesiredDescription allocCopy.DesiredStatus = structs.AllocDesiredStatusStop if allocDiff.ClientStatus != "" { diff --git a/nomad/state/state_store_test.go b/nomad/state/state_store_test.go index 12507b717..69819f255 100644 --- a/nomad/state/state_store_test.go +++ b/nomad/state/state_store_test.go @@ -396,6 +396,8 @@ func TestStateStore_UpsertPlanResults_PreemptedAllocs(t *testing.T) { require.NoError(err) require.Equal(preempted.DesiredStatus, structs.AllocDesiredStatusEvict) require.Equal(preempted.DesiredDescription, fmt.Sprintf("Preempted by alloc ID %v", alloc.ID)) + require.Equal(preempted.Job.ID, preemptedAlloc.Job.ID) + require.Equal(preempted.Job, preemptedAlloc.Job) // Verify eval for preempted job preemptedJobEval, err := state.EvalByID(ws, eval2.ID)