func main() { // initialize command-line opts opts := options.New("mongorestore", mongorestore.Usage, options.EnabledOptions{Auth: true, Connection: true}) nsOpts := &mongorestore.NSOptions{} opts.AddOptions(nsOpts) inputOpts := &mongorestore.InputOptions{} opts.AddOptions(inputOpts) outputOpts := &mongorestore.OutputOptions{} opts.AddOptions(outputOpts) extraArgs, err := opts.Parse() if err != nil { log.Logvf(log.Always, "error parsing command line options: %v", err) log.Logvf(log.Always, "try 'mongorestore --help' for more information") os.Exit(util.ExitBadOptions) } // Allow the db connector to fall back onto the current database when no // auth database is given; the standard -d/-c options go into nsOpts now opts.Namespace = &options.Namespace{DB: nsOpts.DB} // print help or version info, if specified if opts.PrintHelp(false) { return } if opts.PrintVersion() { return } log.SetVerbosity(opts.Verbosity) targetDir, err := getTargetDirFromArgs(extraArgs, inputOpts.Directory) if err != nil { log.Logvf(log.Always, "%v", err) log.Logvf(log.Always, "try 'mongorestore --help' for more information") os.Exit(util.ExitBadOptions) } targetDir = util.ToUniversalPath(targetDir) // connect directly, unless a replica set name is explicitly specified _, setName := util.ParseConnectionString(opts.Host) opts.Direct = (setName == "") opts.ReplicaSetName = setName provider, err := db.NewSessionProvider(*opts) if err != nil { log.Logvf(log.Always, "error connecting to host: %v", err) os.Exit(util.ExitError) } provider.SetBypassDocumentValidation(outputOpts.BypassDocumentValidation) // disable TCP timeouts for restore jobs provider.SetFlags(db.DisableSocketTimeout) restore := mongorestore.MongoRestore{ ToolOptions: opts, OutputOptions: outputOpts, InputOptions: inputOpts, NSOptions: nsOpts, TargetDirectory: targetDir, SessionProvider: provider, } finishedChan := signals.HandleWithInterrupt(restore.HandleInterrupt) defer close(finishedChan) if err = restore.Restore(); err != nil { log.Logvf(log.Always, "Failed: %v", err) if err == util.ErrTerminated { os.Exit(util.ExitKill) } os.Exit(util.ExitError) } }
func main() { // initialize command-line opts opts := options.New("mongodump", mongodump.Usage, options.EnabledOptions{true, true, true}) inputOpts := &mongodump.InputOptions{} opts.AddOptions(inputOpts) outputOpts := &mongodump.OutputOptions{} opts.AddOptions(outputOpts) args, err := opts.Parse() if err != nil { log.Logvf(log.Always, "error parsing command line options: %v", err) log.Logvf(log.Always, "try 'mongodump --help' for more information") os.Exit(util.ExitBadOptions) } if len(args) > 0 { log.Logvf(log.Always, "positional arguments not allowed: %v", args) log.Logvf(log.Always, "try 'mongodump --help' for more information") os.Exit(util.ExitBadOptions) } // print help, if specified if opts.PrintHelp(false) { return } // print version, if specified if opts.PrintVersion() { return } // init logger log.SetVerbosity(opts.Verbosity) // connect directly, unless a replica set name is explicitly specified _, setName := util.ParseConnectionString(opts.Host) opts.Direct = (setName == "") opts.ReplicaSetName = setName dump := mongodump.MongoDump{ ToolOptions: opts, OutputOptions: outputOpts, InputOptions: inputOpts, } finishedChan := signals.HandleWithInterrupt(dump.HandleInterrupt) defer close(finishedChan) if err = dump.Init(); err != nil { log.Logvf(log.Always, "Failed: %v", err) os.Exit(util.ExitError) } if err = dump.Dump(); err != nil { log.Logvf(log.Always, "Failed: %v", err) if err == util.ErrTerminated { os.Exit(util.ExitKill) } os.Exit(util.ExitError) } }