func()

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
}