Fix panic when reschedule policy for allocation can't be looked up

because its task group changed
This commit is contained in:
Preetha Appan 2018-09-05 17:01:02 -05:00
parent 88fefa5404
commit 996484981c
No known key found for this signature in database
GPG key ID: 9F7C19990A50EAFC
2 changed files with 13 additions and 1 deletions

View file

@ -6293,6 +6293,10 @@ func (a *Allocation) NextRescheduleTime() (time.Time, bool) {
// It is calculated according to the delay function and previous reschedule attempts.
func (a *Allocation) NextDelay() time.Duration {
policy := a.ReschedulePolicy()
// Can be nil if the task group was updated to remove its reschedule policy
if policy == nil {
return 0
}
delayDur := policy.Delay
if a.RescheduleTracker == nil || a.RescheduleTracker.Events == nil || len(a.RescheduleTracker.Events) == 0 {
return delayDur

View file

@ -2941,6 +2941,12 @@ func TestAllocation_NextDelay(t *testing.T) {
expectedRescheduleTime: time.Time{},
expectedRescheduleEligible: false,
},
{
desc: "Allocation has no reschedule policy",
alloc: &Allocation{},
expectedRescheduleTime: time.Time{},
expectedRescheduleEligible: false,
},
{
desc: "Allocation lacks task state",
reschedulePolicy: &ReschedulePolicy{
@ -3385,7 +3391,9 @@ func TestAllocation_NextDelay(t *testing.T) {
t.Run(tc.desc, func(t *testing.T) {
require := require.New(t)
j := testJob()
j.TaskGroups[0].ReschedulePolicy = tc.reschedulePolicy
if tc.reschedulePolicy != nil {
j.TaskGroups[0].ReschedulePolicy = tc.reschedulePolicy
}
tc.alloc.Job = j
tc.alloc.TaskGroup = j.TaskGroups[0].Name
reschedTime, allowed := tc.alloc.NextRescheduleTime()