X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/8adcf378579655c4653cbcdae92c9d9eec154ea8..37d9f94b06ff367a3514b58ec6f0e4d4d0116030:/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 c202e683f2..be42252762 100644 --- a/services/crunch-dispatch-local/crunch-dispatch-local.go +++ b/services/crunch-dispatch-local/crunch-dispatch-local.go @@ -17,6 +17,7 @@ import ( "syscall" "time" + "git.arvados.org/arvados.git/lib/cmd" "git.arvados.org/arvados.git/lib/config" "git.arvados.org/arvados.git/sdk/go/arvados" "git.arvados.org/arvados.git/sdk/go/arvadosclient" @@ -26,13 +27,6 @@ import ( var version = "dev" -func main() { - err := doMain() - if err != nil { - logrus.Fatalf("%q", err) - } -} - var ( runningCmds map[string]*exec.Cmd runningCmdsMutex sync.Mutex @@ -40,7 +34,7 @@ var ( crunchRunCommand *string ) -func doMain() error { +func main() { logger := logrus.StandardLogger() if os.Getenv("DEBUG") != "" { logger.SetLevel(logrus.DebugLevel) @@ -66,20 +60,22 @@ func doMain() error { false, "Print version information and exit.") - // Parse args; omit the first arg which is the command name - flags.Parse(os.Args[1:]) + if ok, code := cmd.ParseFlags(flags, os.Args[0], os.Args[1:], "", os.Stderr); !ok { + os.Exit(code) + } // Print version information if requested if *getVersion { fmt.Printf("crunch-dispatch-local %s\n", version) - return nil + return } loader := config.NewLoader(nil, logger) cfg, err := loader.Load() cluster, err := cfg.GetCluster("") if err != nil { - return fmt.Errorf("config error: %s", err) + fmt.Fprintf(os.Stderr, "config error: %s\n", err) + os.Exit(1) } logger.Printf("crunch-dispatch-local %s started", version) @@ -109,7 +105,7 @@ func doMain() error { arv, err := arvadosclient.MakeArvadosClient() if err != nil { logger.Errorf("error making Arvados client: %v", err) - return err + os.Exit(1) } arv.Retries = 25 @@ -124,7 +120,8 @@ func doMain() error { err = dispatcher.Run(ctx) if err != nil { - return err + logger.Error(err) + return } c := make(chan os.Signal, 1) @@ -144,8 +141,6 @@ func doMain() error { // Wait for all running crunch jobs to complete / terminate waitGroup.Wait() - - return nil } func startFunc(container arvados.Container, cmd *exec.Cmd) error { @@ -169,7 +164,7 @@ type LocalRun struct { // crunch-run terminates, mark the container as Cancelled. func (lr *LocalRun) run(dispatcher *dispatch.Dispatcher, container arvados.Container, - status <-chan arvados.Container) { + status <-chan arvados.Container) error { uuid := container.UUID @@ -179,7 +174,7 @@ func (lr *LocalRun) run(dispatcher *dispatch.Dispatcher, case lr.concurrencyLimit <- true: break case <-lr.ctx.Done(): - return + return lr.ctx.Err() } defer func() { <-lr.concurrencyLimit }() @@ -270,4 +265,5 @@ Finish: } dispatcher.Logger.Printf("finalized container %v", uuid) + return nil }