"os"
"os/exec"
"os/signal"
+ "strconv"
"sync"
"syscall"
"time"
// Container data
type Container struct {
- UUID string `json:"uuid"`
- State string `json:"state"`
- Priority int `json:"priority"`
+ UUID string `json:"uuid"`
+ State string `json:"state"`
+ Priority int `json:"priority"`
+ RuntimeConstraints map[string]int `json:"runtime_constraints"`
}
// ContainerList is a list of the containers from api
}
// sbatchCmd
-func sbatchFunc(uuid string) *exec.Cmd {
- return exec.Command("sbatch", "--job-name="+uuid, "--share", "--parsable")
+func sbatchFunc(container Container) *exec.Cmd {
+ return exec.Command("sbatch", "--share", "--parsable",
+ "--job-name="+container.UUID,
+ "--mem="+strconv.Itoa(container.RuntimeConstraints["ram"]),
+ "--cpus-per-task="+strconv.Itoa(container.RuntimeConstraints["vcpus"]))
}
var sbatchCmd = sbatchFunc
}()
// Create the command and attach to stdin/stdout
- cmd := sbatchCmd(container.UUID)
+ cmd := sbatchCmd(container)
stdinWriter, stdinerr := cmd.StdinPipe()
if stdinerr != nil {
submitErr = fmt.Errorf("Error creating stdin pipe %v: %q", container.UUID, stdinerr)
"git.curoverse.com/arvados.git/sdk/go/arvadosclient"
"git.curoverse.com/arvados.git/sdk/go/arvadostest"
+ "fmt"
"io/ioutil"
"log"
"net/http"
"net/http/httptest"
"os"
"os/exec"
+ "strconv"
"strings"
"syscall"
"testing"
var striggerCmdLine []string
// Override sbatchCmd
- defer func(orig func(string) *exec.Cmd) {
+ defer func(orig func(Container) *exec.Cmd) {
sbatchCmd = orig
}(sbatchCmd)
- sbatchCmd = func(uuid string) *exec.Cmd {
- sbatchCmdLine = sbatchFunc(uuid).Args
- return exec.Command("echo", uuid)
+ sbatchCmd = func(container Container) *exec.Cmd {
+ sbatchCmdLine = sbatchFunc(container).Args
+ return exec.Command("echo", container.UUID)
}
// Override striggerCmd
err = doMain()
c.Check(err, IsNil)
- c.Check(sbatchCmdLine, DeepEquals, []string{"sbatch", "--job-name=zzzzz-dz642-queuedcontainer", "--share", "--parsable"})
+ sbatchCmdComps := []string{"sbatch", "--share", "--parsable",
+ fmt.Sprintf("--job-name=%s", containers.Items[0].UUID),
+ fmt.Sprintf("--mem=%s", strconv.Itoa(containers.Items[0].RuntimeConstraints["ram"])),
+ fmt.Sprintf("--cpus-per-task=%s", strconv.Itoa(containers.Items[0].RuntimeConstraints["vcpus"]))}
+ c.Check(sbatchCmdLine, DeepEquals, sbatchCmdComps)
+
c.Check(striggerCmdLine, DeepEquals, []string{"strigger", "--set", "--jobid=zzzzz-dz642-queuedcontainer\n", "--fini",
"--program=/usr/bin/crunch-finish-slurm.sh " + os.Getenv("ARVADOS_API_HOST") + " 4axaw8zxe0qm22wa6urpp5nskcne8z88cvbupv653y1njyi05h 1 zzzzz-dz642-queuedcontainer"})