// 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)
- 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.SetOutput(tempfile)
go func() {
- time.Sleep(1 * time.Second)
+ time.Sleep(2 * time.Second)
sigChan <- syscall.SIGTERM
}()
runQueuedContainers(1, 1, crunchCmd)
- // Give some time for run goroutine to complete
- time.Sleep(5 * time.Second)
+ // Wait for all running crunch jobs to complete / terminate
+ waitGroup.Wait()
buf, _ := ioutil.ReadFile(tempfile.Name())
c.Check(strings.Contains(string(buf), expected), Equals, true)