projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
10703: Do not catch signals in crunch-dispatch-slurm. Simplify "stop dispatcher loop...
[arvados.git]
/
services
/
crunch-dispatch-local
/
crunch-dispatch-local.go
diff --git
a/services/crunch-dispatch-local/crunch-dispatch-local.go
b/services/crunch-dispatch-local/crunch-dispatch-local.go
index 73a389533679a2ceef773a237891921ae5bf92fc..cfb0c7da947186d74b1a3526eb9a3b08d9d58bf5 100644
(file)
--- a/
services/crunch-dispatch-local/crunch-dispatch-local.go
+++ b/
services/crunch-dispatch-local/crunch-dispatch-local.go
@@
-4,12
+4,15
@@
package main
import (
"flag"
import (
"flag"
+ "git.curoverse.com/arvados.git/sdk/go/arvados"
"git.curoverse.com/arvados.git/sdk/go/arvadosclient"
"git.curoverse.com/arvados.git/sdk/go/dispatch"
"log"
"os"
"os/exec"
"git.curoverse.com/arvados.git/sdk/go/arvadosclient"
"git.curoverse.com/arvados.git/sdk/go/dispatch"
"log"
"os"
"os/exec"
+ "os/signal"
"sync"
"sync"
+ "syscall"
"time"
)
"time"
)
@@
-53,16
+56,24
@@
func doMain() error {
arv.Retries = 25
dispatcher := dispatch.Dispatcher{
arv.Retries = 25
dispatcher := dispatch.Dispatcher{
- Arv:
arv,
- RunContainer:
run,
- PollInterval:
time.Duration(*pollInterval) * time.Second,
-
DoneProcessing: make(chan struct{})
}
+ Arv: arv,
+ RunContainer: run,
+ PollInterval: time.Duration(*pollInterval) * time.Second,
+ }
- err = dispatcher.Run
Dispatcher
()
+ err = dispatcher.Run()
if err != nil {
return err
}
if err != nil {
return err
}
+ c := make(chan os.Signal, 1)
+ signal.Notify(c, os.Interrupt, syscall.SIGTERM, syscall.SIGQUIT)
+ sig := <-c
+ log.Printf("Received %s, shutting down", sig)
+ signal.Stop(c)
+
+ dispatcher.Stop()
+
runningCmdsMutex.Lock()
// Finished dispatching; interrupt any crunch jobs that are still running
for _, cmd := range runningCmds {
runningCmdsMutex.Lock()
// Finished dispatching; interrupt any crunch jobs that are still running
for _, cmd := range runningCmds {
@@
-76,7
+87,7
@@
func doMain() error {
return nil
}
return nil
}
-func startFunc(container
dispatch
.Container, cmd *exec.Cmd) error {
+func startFunc(container
arvados
.Container, cmd *exec.Cmd) error {
return cmd.Start()
}
return cmd.Start()
}
@@
-91,8
+102,8
@@
var startCmd = startFunc
// If the container is in any other state, or is not Complete/Cancelled after
// crunch-run terminates, mark the container as Cancelled.
func run(dispatcher *dispatch.Dispatcher,
// If the container is in any other state, or is not Complete/Cancelled after
// crunch-run terminates, mark the container as Cancelled.
func run(dispatcher *dispatch.Dispatcher,
- container
dispatch
.Container,
- status chan
dispatch
.Container) {
+ container
arvados
.Container,
+ status chan
arvados
.Container) {
uuid := container.UUID
uuid := container.UUID
@@
-167,7
+178,7
@@
func run(dispatcher *dispatch.Dispatcher,
}
// drain any subsequent status changes
}
// drain any subsequent status changes
- for
_ =
range status {
+ for range status {
}
log.Printf("Finalized container %v", uuid)
}
log.Printf("Finalized container %v", uuid)