10703: Do not catch signals in crunch-dispatch-slurm. Simplify "stop dispatcher loop...
[arvados.git] / services / crunch-dispatch-local / crunch-dispatch-local.go
index 0ca765185119c152dd11870641c15f905042311e..cfb0c7da947186d74b1a3526eb9a3b08d9d58bf5 100644 (file)
@@ -10,7 +10,9 @@ import (
        "log"
        "os"
        "os/exec"
+       "os/signal"
        "sync"
+       "syscall"
        "time"
 )
 
@@ -54,16 +56,24 @@ func doMain() error {
        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.RunDispatcher()
+       err = dispatcher.Run()
        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 {