// ContainerList is a list of the containers from api
type ContainerList struct {
- ItemsAvailable int `json:"items_available"`
- Items []Container `json:"items"`
+ Items []Container `json:"items"`
}
// Get the list of queued containers from API server and invoke run for each container.
return
}
- for i := 0; i < containers.ItemsAvailable; i++ {
+ for i := 0; i < len(containers.Items); i++ {
log.Printf("About to run queued container %v", containers.Items[i].UUID)
go run(containers.Items[i].UUID, crunchRunCommand, priorityPollInterval)
}
// Set the container state to Running
// If the container priority becomes zero while crunch job is still running, terminate it.
func run(uuid string, crunchRunCommand string, priorityPollInterval int) {
- cmd := exec.Command(crunchRunCommand, "--job", uuid)
+ cmd := exec.Command(crunchRunCommand, uuid)
cmd.Stdin = nil
cmd.Stderr = os.Stderr
} else {
if container.Priority == 0 {
priorityTicker.Stop()
- cmd.Process.Kill()
+ cmd.Process.Signal(os.Interrupt)
return
}
}
err = arv.Update("containers", uuid,
arvadosclient.Dict{
"container": arvadosclient.Dict{"state": "Complete"}},
- &container)
+ nil)
if err != nil {
log.Printf("Error updating container state to Complete for %v: %q", uuid, err)
}
}
func (s *TestSuite) Test_doMain(c *C) {
- args := []string{"-poll-interval", "1", "-container-priority-poll-interval", "1", "-crunch-run-command", "echo"}
+ args := []string{"-poll-interval", "2", "-container-priority-poll-interval", "1", "-crunch-run-command", "echo"}
os.Args = append(os.Args, args...)
go func() {
err := doMain()
c.Check(err, IsNil)
+ // Give some time for run goroutine to complete
+ time.Sleep(1 * time.Second)
+
// There should be no queued containers now
params := arvadosclient.Dict{
"filters": [][]string{[]string{"state", "=", "Queued"}},
var containers ContainerList
err = arv.List("containers", params, &containers)
c.Check(err, IsNil)
- c.Assert(containers.ItemsAvailable, Equals, 0)
+ c.Assert(len(containers.Items), Equals, 0)
// Previously "Queued" container should now be in "Complete" state
var container Container