From 7825a3ca4d6c8a4f2f89381893d63e809c5b49db Mon Sep 17 00:00:00 2001 From: Mahmood Ali Date: Mon, 10 Jun 2019 17:19:54 -0400 Subject: [PATCH] Stop updating allocs.Job on stopping or preemption --- nomad/plan_apply.go | 4 ++-- nomad/state/state_store.go | 20 +++++++++----------- nomad/state/state_store_test.go | 2 +- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/nomad/plan_apply.go b/nomad/plan_apply.go index f9b8d7c63..92873d0d5 100644 --- a/nomad/plan_apply.go +++ b/nomad/plan_apply.go @@ -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 } diff --git a/nomad/state/state_store.go b/nomad/state/state_store.go index 6da9f6e8f..e38099091 100644 --- a/nomad/state/state_store.go +++ b/nomad/state/state_store.go @@ -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 != "" { diff --git a/nomad/state/state_store_test.go b/nomad/state/state_store_test.go index 390deb137..d21e4bbde 100644 --- a/nomad/state/state_store_test.go +++ b/nomad/state/state_store_test.go @@ -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)