//
// SPDX-License-Identifier: AGPL-3.0
-package main
+package dispatchslurm
import (
"fmt"
)
type Slurm interface {
+ Batch(script io.Reader, args []string) error
Cancel(name string) error
- Renice(name string, nice int) error
QueueCommand(args []string) *exec.Cmd
- Batch(script io.Reader, args []string) error
+ Release(name string) error
+ Renice(name string, nice int64) error
+}
+
+type slurmCLI struct {
+ runSemaphore chan bool
}
-type slurmCLI struct{}
+func NewSlurmCLI() *slurmCLI {
+ return &slurmCLI{
+ runSemaphore: make(chan bool, 3),
+ }
+}
func (scli *slurmCLI) Batch(script io.Reader, args []string) error {
return scli.run(script, "sbatch", args)
return exec.Command("squeue", args...)
}
-func (scli *slurmCLI) Renice(name string, nice int) error {
+func (scli *slurmCLI) Release(name string) error {
+ return scli.run(nil, "scontrol", []string{"release", "Name=" + name})
+}
+
+func (scli *slurmCLI) Renice(name string, nice int64) error {
return scli.run(nil, "scontrol", []string{"update", "JobName=" + name, fmt.Sprintf("Nice=%d", nice)})
}
func (scli *slurmCLI) run(stdin io.Reader, prog string, args []string) error {
+ scli.runSemaphore <- true
+ defer func() { <-scli.runSemaphore }()
cmd := exec.Command(prog, args...)
cmd.Stdin = stdin
out, err := cmd.CombinedOutput()