mirror of
https://github.com/kemko/nomad.git
synced 2026-01-05 09:55:44 +03:00
Use time from task events if task state does not have FinishedAt set
This commit is contained in:
@@ -5736,9 +5736,19 @@ func (a *Allocation) RescheduleEligible(reschedulePolicy *ReschedulePolicy, fail
|
||||
func (a *Allocation) LastEventTime() time.Time {
|
||||
var lastEventTime time.Time
|
||||
if a.TaskStates != nil {
|
||||
for _, e := range a.TaskStates {
|
||||
if lastEventTime.IsZero() || e.FinishedAt.After(lastEventTime) {
|
||||
lastEventTime = e.FinishedAt
|
||||
for _, s := range a.TaskStates {
|
||||
if lastEventTime.IsZero() || s.FinishedAt.After(lastEventTime) {
|
||||
lastEventTime = s.FinishedAt
|
||||
}
|
||||
}
|
||||
}
|
||||
// If no tasks have FinsihedAt set, examine task events
|
||||
if lastEventTime.IsZero() {
|
||||
for _, s := range a.TaskStates {
|
||||
for _, e := range s.Events {
|
||||
if lastEventTime.IsZero() || e.Time > lastEventTime.UnixNano() {
|
||||
lastEventTime = time.Unix(0, e.Time).UTC()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2668,14 +2668,14 @@ func TestAllocation_LastEventTime(t *testing.T) {
|
||||
expectedLastEventTime: t1,
|
||||
},
|
||||
{
|
||||
desc: "One finished event",
|
||||
desc: "One finished ",
|
||||
taskState: map[string]*TaskState{"foo": {State: "start",
|
||||
StartedAt: t1.Add(-2 * time.Hour),
|
||||
FinishedAt: t1.Add(-1 * time.Hour)}},
|
||||
expectedLastEventTime: t1.Add(-1 * time.Hour),
|
||||
},
|
||||
{
|
||||
desc: "Multiple events",
|
||||
desc: "Multiple task groups",
|
||||
taskState: map[string]*TaskState{"foo": {State: "start",
|
||||
StartedAt: t1.Add(-2 * time.Hour),
|
||||
FinishedAt: t1.Add(-1 * time.Hour)},
|
||||
@@ -2684,6 +2684,29 @@ func TestAllocation_LastEventTime(t *testing.T) {
|
||||
FinishedAt: t1.Add(-40 * time.Minute)}},
|
||||
expectedLastEventTime: t1.Add(-40 * time.Minute),
|
||||
},
|
||||
{
|
||||
desc: "No finishedAt set, one task event",
|
||||
taskState: map[string]*TaskState{"foo": {
|
||||
State: "run",
|
||||
StartedAt: t1.Add(-2 * time.Hour),
|
||||
Events: []*TaskEvent{
|
||||
{Type: "start", Time: t1.Add(-20 * time.Minute).UnixNano()},
|
||||
}},
|
||||
},
|
||||
expectedLastEventTime: t1.Add(-20 * time.Minute),
|
||||
},
|
||||
{
|
||||
desc: "No finishedAt set, many task events",
|
||||
taskState: map[string]*TaskState{"foo": {
|
||||
State: "run",
|
||||
StartedAt: t1.Add(-2 * time.Hour),
|
||||
Events: []*TaskEvent{
|
||||
{Type: "start", Time: t1.Add(-20 * time.Minute).UnixNano()},
|
||||
{Type: "status change", Time: t1.Add(-10 * time.Minute).UnixNano()},
|
||||
}},
|
||||
},
|
||||
expectedLastEventTime: t1.Add(-10 * time.Minute),
|
||||
},
|
||||
}
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.desc, func(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user