-
- err = cmd.Start()
- if err != nil {
- log.Printf("Error running squeue: %v", err)
- return
- }
-
- stderrChan := make(chan []byte)
- go func() {
- b, _ := ioutil.ReadAll(stderrReader)
- stderrChan <- b
- close(stderrChan)
- }()
-
- scanner := bufio.NewScanner(sq)
- for scanner.Scan() {
- newSqueueContents = append(newSqueueContents, scanner.Text())
- }
- io.Copy(ioutil.Discard, sq)
-
- stderrmsg := <-stderrChan
-
- err = cmd.Wait()
-
- if scanner.Err() != nil {
- log.Printf("Error reading from squeue pipe: %v", err)
- }
- if err != nil {
- log.Printf("Error running %v %v: %v %q", cmd.Path, cmd.Args, err, string(stderrmsg))
- }
-
- if scanner.Err() == nil && err == nil {
- squeue.squeueCond.L.Lock()
- squeue.squeueContents = newSqueueContents
- squeue.squeueCond.Broadcast()
- squeue.squeueCond.L.Unlock()
- }
-}
-
-// CheckSqueue checks if a given container UUID is in the slurm queue. This
-// does not run squeue directly, but instead blocks until woken up by next
-// successful update of squeue.
-func (squeue *Squeue) CheckSqueue(uuid string) bool {
- squeue.squeueCond.L.Lock()
- // block until next squeue broadcast signaling an update.
- squeue.squeueCond.Wait()
- contents := squeue.squeueContents
- squeue.squeueCond.L.Unlock()
-
- for _, k := range contents {
- if k == uuid {
- return true
- }
- }
- return false