mirror of
https://github.com/kemko/nomad.git
synced 2026-01-07 19:05:42 +03:00
Merge pull request #5717 from hashicorp/b-plan-apply-preemptions
Fix bug in plan applier introduced in PR-5602
This commit is contained in:
@@ -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 != "" {
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user