in plugins/storage/memory/memory.go [240:293]
func (m *Memory) ListJobs(_ xcontext.Context, query *storage.JobQuery) ([]types.JobID, error) {
m.lock.Lock()
defer m.lock.Unlock()
res := []types.JobID{}
if err := job.CheckTags(query.Tags, true /* allowInternal */); err != nil {
return nil, err
}
jobLoop:
for jobId, jobInfo := range m.jobInfo {
if len(query.ServerID) > 0 {
if jobInfo.request.ServerID != query.ServerID {
continue
}
}
if len(query.Tags) > 0 {
for _, qTag := range query.Tags {
found := false
for _, jTag := range jobInfo.desc.Tags {
if jTag == qTag {
found = true
}
}
if !found {
continue jobLoop
}
}
}
if len(query.States) > 0 {
var lastEventTime time.Time
jobState := job.JobStateUnknown
for _, event := range m.frameworkEvents {
if eventJobMatch(jobId, event.JobID) &&
eventNameMatch(job.JobStateEvents, event.EventName) &&
event.EmitTime.After(lastEventTime) {
jobState, _ = job.EventNameToJobState(event.EventName)
lastEventTime = event.EmitTime
}
}
found := false
for _, queryState := range query.States {
if jobState == queryState {
found = true
break
}
}
if !found {
continue jobLoop
}
}
res = append(res, jobId)
}
sort.Slice(res, func(i, j int) bool { return res[i] < res[j] })
return res, nil
}