Skip to content

Commit 781fc4f

Browse files
committed
Merge branch 'master' into electra-support
2 parents 0bfce95 + 807cddd commit 781fc4f

1 file changed

Lines changed: 59 additions & 0 deletions

File tree

pkg/coordinator/test/dbtest.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package test
22

33
import (
44
"fmt"
5+
"sort"
56
"sync"
67
"time"
78

@@ -113,6 +114,8 @@ func (dbt *dbTest) GetAllTasks() []types.TaskIndex {
113114
taskIDs = append(taskIDs, types.TaskIndex(task.TaskID))
114115
}
115116

117+
dbt.sortTaskList(taskIDs)
118+
116119
return taskIDs
117120
}
118121

@@ -149,6 +152,8 @@ func (dbt *dbTest) GetAllCleanupTasks() []types.TaskIndex {
149152
taskIDs = append(taskIDs, types.TaskIndex(task.TaskID))
150153
}
151154

155+
dbt.sortTaskList(taskIDs)
156+
152157
return taskIDs
153158
}
154159

@@ -172,6 +177,60 @@ func (dbt *dbTest) GetRootCleanupTasks() []types.TaskIndex {
172177
return taskIDs
173178
}
174179

180+
func (dbt *dbTest) sortTaskList(taskList []types.TaskIndex) {
181+
taskMap := map[types.TaskIndex]*db.TaskStateIndex{}
182+
183+
for _, task := range dbt.taskIndex {
184+
taskMap[types.TaskIndex(task.TaskID)] = task
185+
}
186+
187+
sort.Slice(taskList, func(a, b int) bool {
188+
taskStateA := taskMap[taskList[a]]
189+
taskStateB := taskMap[taskList[b]]
190+
191+
if taskStateA == nil || taskStateB == nil {
192+
return false
193+
}
194+
195+
if taskStateA.ParentTask == taskStateB.ParentTask {
196+
return taskStateA.TaskID < taskStateB.TaskID
197+
}
198+
199+
for {
200+
switch {
201+
case taskStateA.ParentTask == int(taskList[b]):
202+
return false
203+
case taskStateB.ParentTask == int(taskList[a]):
204+
return true
205+
}
206+
207+
taskStateADepth := 0
208+
for taskState := taskStateA; taskState != nil && taskState.ParentTask != 0; taskState = taskMap[types.TaskIndex(taskState.ParentTask)] {
209+
taskStateADepth++
210+
}
211+
212+
taskStateBDepth := 0
213+
for taskState := taskStateB; taskState != nil && taskState.ParentTask != 0; taskState = taskMap[types.TaskIndex(taskState.ParentTask)] {
214+
taskStateBDepth++
215+
}
216+
217+
switch {
218+
case taskStateADepth > taskStateBDepth:
219+
taskStateA = taskMap[types.TaskIndex(taskStateA.ParentTask)]
220+
case taskStateBDepth > taskStateADepth:
221+
taskStateB = taskMap[types.TaskIndex(taskStateB.ParentTask)]
222+
default:
223+
taskStateA = taskMap[types.TaskIndex(taskStateA.ParentTask)]
224+
taskStateB = taskMap[types.TaskIndex(taskStateB.ParentTask)]
225+
}
226+
227+
if taskStateA.ParentTask == taskStateB.ParentTask {
228+
return taskStateA.TaskID < taskStateB.TaskID
229+
}
230+
}
231+
})
232+
}
233+
175234
func (dbt *dbTest) GetTaskState(taskIndex types.TaskIndex) types.TaskState {
176235
task, err := dbt.database.GetTaskStateByTaskID(dbt.runID, int(taskIndex))
177236
if err != nil {

0 commit comments

Comments
 (0)