runQueuedContainers(*pollInterval, *priorityPollInterval, *crunchRunCommand)
// Finished dispatching; interrupt any crunch jobs that are still running
- for uuid, cmd := range runningCmds {
- go func(uuid string) {
- cmd.Process.Signal(os.Interrupt)
- if _, err := cmd.Process.Wait(); err != nil {
- log.Printf("Error while waiting for crunch job to finish for %v: %q", uuid, err)
- }
- }(uuid)
+ for _, cmd := range runningCmds {
+ cmd.Process.Signal(os.Interrupt)
}
// Wait for all running crunch jobs to complete / terminate
// A goroutine to terminate the runner if container priority becomes zero
priorityTicker := time.NewTicker(time.Duration(priorityPollInterval) * time.Second)
go func() {
- for {
- select {
- case <-priorityTicker.C:
- var container Container
- err := arv.Get("containers", uuid, nil, &container)
- if err != nil {
- log.Printf("Error getting container info for %v: %q", uuid, err)
- } else {
- if container.Priority == 0 {
- priorityTicker.Stop()
- cmd.Process.Signal(os.Interrupt)
- runningCmdsMutex.Lock()
- delete(runningCmds, uuid)
- runningCmdsMutex.Unlock()
- return
- }
+ for _ = range priorityTicker.C {
+ var container Container
+ err := arv.Get("containers", uuid, nil, &container)
+ if err != nil {
+ log.Printf("Error getting container info for %v: %q", uuid, err)
+ } else {
+ if container.Priority == 0 {
+ priorityTicker.Stop()
+ cmd.Process.Signal(os.Interrupt)
}
}
}
log.Printf("Error updating container state to Complete for %v: %q", uuid, err)
}
}
+
+ log.Printf("Finished container run for %v", uuid)
}