Check allocation's desired state in GC eligibility logic in core scheduler
This commit is contained in:
parent
38c69cf0e6
commit
a9d63c0df3
|
@ -610,6 +610,12 @@ func allocGCEligible(a *structs.Allocation, job *structs.Job, gcTime time.Time,
|
|||
return true
|
||||
}
|
||||
|
||||
// If the allocation's desired state is Stop, it can be GCed even if it
|
||||
// has failed and hasn't been rescheduled. This can happen during job updates
|
||||
if a.DesiredStatus == structs.AllocDesiredStatusStop {
|
||||
return true
|
||||
}
|
||||
|
||||
// If the alloc hasn't failed then we don't need to consider it for rescheduling
|
||||
// Rescheduling needs to copy over information from the previous alloc so that it
|
||||
// can enforce the reschedule policy
|
||||
|
|
|
@ -1980,6 +1980,27 @@ func TestAllocation_GCEligible(t *testing.T) {
|
|||
JobStatus: structs.JobStatusDead,
|
||||
ShouldGC: true,
|
||||
},
|
||||
{
|
||||
Desc: "GC when desired status is stop, unlimited reschedule policy, no previous reschedule events",
|
||||
ClientStatus: structs.AllocClientStatusFailed,
|
||||
DesiredStatus: structs.AllocDesiredStatusStop,
|
||||
GCTime: fail,
|
||||
ReschedulePolicy: &structs.ReschedulePolicy{Unlimited: true, Delay: 5 * time.Second, DelayFunction: "constant"},
|
||||
ShouldGC: true,
|
||||
},
|
||||
{
|
||||
Desc: "GC when desired status is stop, limited reschedule policy, some previous reschedule events",
|
||||
ClientStatus: structs.AllocClientStatusFailed,
|
||||
DesiredStatus: structs.AllocDesiredStatusStop,
|
||||
GCTime: fail,
|
||||
ReschedulePolicy: &structs.ReschedulePolicy{Attempts: 5, Interval: 30 * time.Minute},
|
||||
RescheduleTrackers: []*structs.RescheduleEvent{
|
||||
{
|
||||
RescheduleTime: fail.Add(-3 * time.Minute).UTC().UnixNano(),
|
||||
},
|
||||
},
|
||||
ShouldGC: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range harness {
|
||||
|
|
Loading…
Reference in a new issue