mirror of
https://github.com/kemko/nomad.git
synced 2026-01-06 18:35:44 +03:00
Stop updating allocs.Job on stopping or preemption
This commit is contained in:
@@ -339,12 +339,12 @@ func evaluatePlan(pool *EvaluatePool, snap *state.StateSnapshot, plan *structs.P
|
||||
defer metrics.MeasureSince([]string{"nomad", "plan", "evaluate"}, time.Now())
|
||||
|
||||
// Denormalize without the job
|
||||
err := snap.DenormalizeAllocationsMap(plan.NodeUpdate, nil)
|
||||
err := snap.DenormalizeAllocationsMap(plan.NodeUpdate)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// Denormalize without the job
|
||||
err = snap.DenormalizeAllocationsMap(plan.NodePreemptions, nil)
|
||||
err = snap.DenormalizeAllocationsMap(plan.NodePreemptions)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -230,18 +230,18 @@ func (s *StateStore) UpsertPlanResults(index uint64, results *structs.ApplyPlanR
|
||||
return err
|
||||
}
|
||||
|
||||
allocsStopped, err := snapshot.DenormalizeAllocationDiffSlice(results.AllocsStopped, results.Job)
|
||||
allocsStopped, err := snapshot.DenormalizeAllocationDiffSlice(results.AllocsStopped)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
allocsPreempted, err := snapshot.DenormalizeAllocationDiffSlice(results.AllocsPreempted, results.Job)
|
||||
allocsPreempted, err := snapshot.DenormalizeAllocationDiffSlice(results.AllocsPreempted)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// COMPAT 0.11: Remove this denormalization when NodePreemptions is removed
|
||||
results.NodePreemptions, err = snapshot.DenormalizeAllocationSlice(results.NodePreemptions, results.Job)
|
||||
results.NodePreemptions, err = snapshot.DenormalizeAllocationSlice(results.NodePreemptions)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -4192,9 +4192,9 @@ type StateSnapshot struct {
|
||||
// DenormalizeAllocationsMap takes in a map of nodes to allocations, and queries the
|
||||
// Allocation for each of the Allocation diffs and merges the updated attributes with
|
||||
// the existing Allocation, and attaches the Job provided
|
||||
func (s *StateSnapshot) DenormalizeAllocationsMap(nodeAllocations map[string][]*structs.Allocation, job *structs.Job) error {
|
||||
func (s *StateSnapshot) DenormalizeAllocationsMap(nodeAllocations map[string][]*structs.Allocation) error {
|
||||
for nodeID, allocs := range nodeAllocations {
|
||||
denormalizedAllocs, err := s.DenormalizeAllocationSlice(allocs, job)
|
||||
denormalizedAllocs, err := s.DenormalizeAllocationSlice(allocs)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -4207,18 +4207,18 @@ func (s *StateSnapshot) DenormalizeAllocationsMap(nodeAllocations map[string][]*
|
||||
// DenormalizeAllocationSlice queries the Allocation for each allocation diff
|
||||
// represented as an Allocation and merges the updated attributes with the existing
|
||||
// Allocation, and attaches the Job provided.
|
||||
func (s *StateSnapshot) DenormalizeAllocationSlice(allocs []*structs.Allocation, job *structs.Job) ([]*structs.Allocation, error) {
|
||||
func (s *StateSnapshot) DenormalizeAllocationSlice(allocs []*structs.Allocation) ([]*structs.Allocation, error) {
|
||||
allocDiffs := make([]*structs.AllocationDiff, len(allocs))
|
||||
for i, alloc := range allocs {
|
||||
allocDiffs[i] = alloc.AllocationDiff()
|
||||
}
|
||||
|
||||
return s.DenormalizeAllocationDiffSlice(allocDiffs, job)
|
||||
return s.DenormalizeAllocationDiffSlice(allocDiffs)
|
||||
}
|
||||
|
||||
// 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, planJob *structs.Job) ([]*structs.Allocation, error) {
|
||||
func (s *StateSnapshot) DenormalizeAllocationDiffSlice(allocDiffs []*structs.AllocationDiff) ([]*structs.Allocation, error) {
|
||||
// Output index for denormalized Allocations
|
||||
j := 0
|
||||
|
||||
@@ -4233,17 +4233,15 @@ func (s *StateSnapshot) DenormalizeAllocationDiffSlice(allocDiffs []*structs.All
|
||||
}
|
||||
|
||||
// Merge the updates to the Allocation
|
||||
allocCopy := alloc.CopySkipJob()
|
||||
allocCopy := alloc.Copy()
|
||||
|
||||
if allocDiff.PreemptedByAllocation != "" {
|
||||
// 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 != "" {
|
||||
|
||||
@@ -7132,7 +7132,7 @@ func TestStateSnapshot_DenormalizeAllocationDiffSlice_AllocDoesNotExist(t *testi
|
||||
snap, err := state.Snapshot()
|
||||
require.NoError(err)
|
||||
|
||||
denormalizedAllocs, err := snap.DenormalizeAllocationDiffSlice(allocDiffs, alloc.Job)
|
||||
denormalizedAllocs, err := snap.DenormalizeAllocationDiffSlice(allocDiffs)
|
||||
|
||||
require.EqualError(err, fmt.Sprintf("alloc %v doesn't exist", alloc.ID))
|
||||
require.Nil(denormalizedAllocs)
|
||||
|
||||
Reference in New Issue
Block a user