X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f6071ef7bc7f6b7308c202e330cabd4ca111aadd..e59c1d365d9b6e1eff9b5cb030a8b1a3aaf14353:/services/crunch-dispatch-slurm/squeue.go diff --git a/services/crunch-dispatch-slurm/squeue.go b/services/crunch-dispatch-slurm/squeue.go index 0c90679d3f..ee87a44fff 100644 --- a/services/crunch-dispatch-slurm/squeue.go +++ b/services/crunch-dispatch-slurm/squeue.go @@ -49,7 +49,7 @@ func (sqc *SqueueChecker) Stop() { // check gets the names of jobs in the SLURM queue (running and // queued). If it succeeds, it updates squeue.uuids and wakes up any -// goroutines that are waiting in HasUUID(). +// goroutines that are waiting in HasUUID() or All(). func (sqc *SqueueChecker) check() { // Mutex between squeue sync and running sbatch or scancel. This // establishes a sequence so that squeue doesn't run concurrently with @@ -93,7 +93,16 @@ func (sqc *SqueueChecker) start() { }() } -// All Uuids in squeue -func (sqc *SqueueChecker) AllUuids() map[string]bool { - return sqc.uuids +// All waits for the next squeue invocation, and returns all job +// names reported by squeue. +func (sqc *SqueueChecker) All() []string { + sqc.startOnce.Do(sqc.start) + sqc.L.Lock() + defer sqc.L.Unlock() + sqc.Wait() + var uuids []string + for uuid := range sqc.uuids { + uuids = append(uuids, uuid) + } + return uuids }