X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/1f82ade9be8494e114156210d600a9624262ddba..bcad695db9a1c3aac5807faa153086e653107f51:/lib/recovercollection/cmd.go diff --git a/lib/recovercollection/cmd.go b/lib/recovercollection/cmd.go index cea4607c98..5038e4788a 100644 --- a/lib/recovercollection/cmd.go +++ b/lib/recovercollection/cmd.go @@ -15,6 +15,7 @@ import ( "sync" "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/ctxlog" @@ -38,8 +39,7 @@ func (command) RunCommand(prog string, args []string, stdin io.Reader, stdout, s loader := config.NewLoader(stdin, logger) loader.SkipLegacy = true - flags := flag.NewFlagSet("", flag.ContinueOnError) - flags.SetOutput(stderr) + flags := flag.NewFlagSet(prog, flag.ContinueOnError) flags.Usage = func() { fmt.Fprintf(flags.Output(), `Usage: %s [options ...] { /path/to/manifest.txt | log-or-collection-uuid } [...] @@ -79,16 +79,10 @@ Options: } loader.SetupFlags(flags) loglevel := flags.String("log-level", "info", "logging level (debug, info, ...)") - err = flags.Parse(args) - if err == flag.ErrHelp { - err = nil - return 0 - } else if err != nil { - return 2 - } - - if len(flags.Args()) == 0 { - flags.Usage() + if ok, code := cmd.ParseFlags(flags, prog, args, "source [...]", stderr); !ok { + return code + } else if flags.NArg() == 0 { + fmt.Fprintf(stderr, "missing required arguments (try -help)\n") return 2 } @@ -204,8 +198,8 @@ var errNotFound = errors.New("not found") // Finds the timestamp of the newest copy of blk on svc. Returns // errNotFound if blk is not on svc at all. -func (rcvr recoverer) newestMtime(logger logrus.FieldLogger, blk string, svc arvados.KeepService) (time.Time, error) { - found, err := svc.Index(rcvr.client, blk) +func (rcvr recoverer) newestMtime(ctx context.Context, logger logrus.FieldLogger, blk string, svc arvados.KeepService) (time.Time, error) { + found, err := svc.Index(ctx, rcvr.client, blk) if err != nil { logger.WithError(err).Warn("error getting index") return time.Time{}, err @@ -236,7 +230,7 @@ var errTouchIneffective = errors.New("(BUG?) touch succeeded but had no effect - // saved. But if the block's timestamp is more recent than blobsigttl, // keepstore will refuse to trash it even if told to by keep-balance. func (rcvr recoverer) ensureSafe(ctx context.Context, logger logrus.FieldLogger, blk string, svc arvados.KeepService, blobsigttl time.Duration, blobsigexp time.Time) error { - if latest, err := rcvr.newestMtime(logger, blk, svc); err != nil { + if latest, err := rcvr.newestMtime(ctx, logger, blk, svc); err != nil { return err } else if latest.Add(blobsigttl).After(blobsigexp) { return nil @@ -245,7 +239,7 @@ func (rcvr recoverer) ensureSafe(ctx context.Context, logger logrus.FieldLogger, return fmt.Errorf("error updating timestamp: %s", err) } logger.Debug("updated timestamp") - if latest, err := rcvr.newestMtime(logger, blk, svc); err == errNotFound { + if latest, err := rcvr.newestMtime(ctx, logger, blk, svc); err == errNotFound { return fmt.Errorf("(BUG?) touch succeeded, but then block did not appear in index") } else if err != nil { return err