Exemple #1
0
 def abort(self, *msgs):
     """
     Display errors (optional) and abort execution.
     """
     utility.error('Fatal error in "%s" command.' % self.verb.name, *msgs)
     self.help()
     utility.abort()
Exemple #2
0
def pause(runner):
    # Check the STATUS column. runner.call_proc() detects and aborts on errors.
    status = runner.call_proc('@Pause', [], []).table(0).tuple(0).column_integer(0)
    if status == 0:
        utility.info('The cluster is paused.')
    else:
        utility.error('The cluster has failed to pause with status: %d' % status)
Exemple #3
0
 def help(self, *args, **kwargs):
     """
     Display help for command.
     """
     # The only valid keyword argument is 'all' for now.
     context = '%s.help()' % self.__class__.__name__
     all = utility.kwargs_get_boolean(kwargs, 'all', default=False)
     if all:
         for verb_name in self.verbspace.verb_names:
             verb_spec = self.verbspace.verbs[verb_name].cli_spec
             if not verb_spec.baseverb and not verb_spec.hideverb:
                 sys.stdout.write('\n===== Verb: %s =====\n\n' % verb_name)
                 self._print_verb_help(verb_name)
         for verb_name in self.verbspace.verb_names:
             verb_spec = self.verbspace.verbs[verb_name].cli_spec
             if verb_spec.baseverb and not verb_spec.hideverb:
                 sys.stdout.write('\n===== Common Verb: %s =====\n\n' %
                                  verb_name)
                 self._print_verb_help(verb_name)
     else:
         if args:
             for name in args:
                 for verb_name in self.verbspace.verb_names:
                     if verb_name == name.lower():
                         sys.stdout.write('\n')
                         self._print_verb_help(verb_name)
                         break
                 else:
                     utility.error('Verb "%s" was not found.' % name)
                     self.usage()
         else:
             self.usage()
Exemple #4
0
 def help(self, *args, **kwargs):
     """
     Display help for command.
     """
     # The only valid keyword argument is 'all' for now.
     context = '%s.help()' % self.__class__.__name__
     all = utility.kwargs_get_boolean(kwargs, 'all', default = False)
     if all:
         for verb_name in self.verbspace.verb_names:
             verb_spec = self.verbspace.verbs[verb_name].cli_spec
             if not verb_spec.baseverb and not verb_spec.hideverb:
                 sys.stdout.write('\n===== Verb: %s =====\n\n' % verb_name)
                 self._print_verb_help(verb_name)
         for verb_name in self.verbspace.verb_names:
             verb_spec = self.verbspace.verbs[verb_name].cli_spec
             if verb_spec.baseverb and not verb_spec.hideverb:
                 sys.stdout.write('\n===== Common Verb: %s =====\n\n' % verb_name)
                 self._print_verb_help(verb_name)
     else:
         if args:
             for name in args:
                 for verb_name in self.verbspace.verb_names:
                     if verb_name == name.lower():
                         sys.stdout.write('\n')
                         self._print_verb_help(verb_name)
                         break
                 else:
                     utility.error('Verb "%s" was not found.' % name)
                     self.usage()
         else:
             self.usage()
Exemple #5
0
def pause(runner):
    # Check the STATUS column. runner.call_proc() detects and aborts on errors.
    status = runner.call_proc('@Pause', [],
                              []).table(0).tuple(0).column_integer(0)
    if status == 0:
        utility.info('The cluster is paused.')
    else:
        utility.error('The cluster has failed to pause with status: %d' %
                      status)
Exemple #6
0
 def _abort(self, show_help, *msgs):
     if self.verb:
         utility.error('Fatal error in "%s" command.' % self.verb.name, *msgs)
         if show_help:
             self.verb_usage()
     else:
         utility.error(*msgs)
         if show_help:
             self.help()
     sys.exit(1)
Exemple #7
0
 def _abort(self, show_help, *msgs):
     if self.verb:
         utility.error('Fatal error in "%s" command.' % self.verb.name, *msgs)
         if show_help:
             self.verb_usage()
     else:
         utility.error(*msgs)
         if show_help:
             self.help()
     sys.exit(1)
Exemple #8
0
 def go(self, runner):
     mod_name = runner.opts.modifier.lower()
     for mod in self.modifiers:
         if mod.name == mod_name:
             mod.function(runner)
             break
     else:
         utility.error('Invalid "%s" modifier "%s". Valid modifiers are listed below:'
                             % (self.name, mod_name),
                       [mod.name for mod in self.modifiers])
         runner.help(self.name)
Exemple #9
0
 def error(self, *msgs):
     """
     Display ERROR level messages.
     """
     utility.error(*msgs)
Exemple #10
0
             # All other arguments are treated as scalars.
             # Pass through argument class get() for validation, conversion, etc..
             try:
                 value = arg.get(args[iarg])
             except ArgumentException, e:
                 exceptions.append(e)
             iarg += 1
         if value is not None or arg.min_count == 0:
             setattr(verb_opts, arg.name, value)
 # Run the gauntlet of error disclosure. Abort and display usage as appropriate.
 had_errors = 0
 show_usage = False
 if exceptions:
     msg = 'Argument value %s:' % utility.pluralize(
         'error', len(exceptions))
     utility.error(msg, [str(e) for e in exceptions])
     had_errors += 1
 if iarg < len(args):
     self._abort('Extra arguments were provided:', args[iarg:])
     had_errors += 1
     show_usage = True
 if missing:
     fmt = '%%-%ds  %%s' % max([len(o) for (o, h) in missing])
     msg = 'Missing required %s:' % utility.pluralize(
         'argument', len(missing))
     utility.error(msg, [fmt % (o.upper(), h) for (o, h) in missing])
     had_errors += 1
     show_usage = True
 if had_errors > 0:
     if show_usage:
         self._abort()
Exemple #11
0
         else:
             # All other arguments are treated as scalars.
             # Pass through argument class get() for validation, conversion, etc..
             try:
                 value = arg.get(args[iarg])
             except ArgumentException, e:
                 exceptions.append(e)
             iarg += 1
         if value is not None:
             setattr(verb_opts, arg.name, value)
 # Run the gauntlet of error disclosure. Abort and display usage as appropriate.
 had_errors = 0
 show_usage = False
 if exceptions:
     msg = 'Argument value %s:' % utility.pluralize('error', len(exceptions))
     utility.error(msg, [e.message for e in exceptions])
     had_errors += 1
 if iarg < len(args):
     self._abort('Extra arguments were provided:', args[iarg:])
     had_errors += 1
     show_usage = True
 if missing:
     fmt = '%%-%ds  %%s' % max([len(o) for (o, h) in missing])
     msg = 'Missing required %s:' % utility.pluralize('argument', len(missing))
     utility.error(msg, [fmt % (o.upper(), h) for (o, h) in missing])
     had_errors += 1
     show_usage = True
 if had_errors > 0:
     if show_usage:
         self._abort()
     sys.exit(1)
Exemple #12
0
 def _abort(self, *msgs):
     utility.error(*msgs)
     sys.stdout.write('\n')
     self.print_help()
     sys.stdout.write('\n')
     sys.exit(1)
Exemple #13
0
    def go(self, verb, runner):
        if self.check_environment_config:
            incompatible_options = checkconfig.test_hard_requirements()
            for k,v in  incompatible_options.items():
                state = v[0]
                if state == 'PASS' :
                    pass
                elif state == "WARN":
                    utility.warning(v[1])
                elif state == 'FAIL' :
                    if k in checkconfig.skippableRequirements.keys() and runner.opts.skip_requirements and checkconfig.skippableRequirements[k] in runner.opts.skip_requirements:
                        utility.warning(v[1])
                    else:
                        utility.abort(v[1])
                else:
                    utility.error(v[1])
        final_args = None
        if self.subcommand in ('create', 'recover'):
            if runner.opts.replica:
                final_args = [self.subcommand, 'replica']
        if self.supports_live:
            if runner.opts.block:
                final_args = [self.subcommand]
            else:
                final_args = ['live', self.subcommand]
        elif final_args == None:
            final_args = [self.subcommand]
        if self.safemode_available:
            if runner.opts.safemode:
                final_args.extend(['safemode'])

        if self.needs_catalog:
            catalog = runner.opts.catalog
            if not catalog:
                catalog = runner.config.get('volt.catalog')
            if not catalog is None:
                final_args.extend(['catalog', catalog])

        if runner.opts.deployment:
            final_args.extend(['deployment', runner.opts.deployment])
        if runner.opts.placementgroup:
            final_args.extend(['placementgroup', runner.opts.placementgroup])
        if runner.opts.host:
            final_args.extend(['host', runner.opts.host])
        else:
            utility.abort('host is required.')
        if runner.opts.clientport:
            final_args.extend(['port', runner.opts.clientport])
        if runner.opts.adminport:
            final_args.extend(['adminport', runner.opts.adminport])
        if runner.opts.httpport:
            final_args.extend(['httpport', runner.opts.httpport])
        if runner.opts.license:
            final_args.extend(['license', runner.opts.license])
        if runner.opts.internalinterface:
            final_args.extend(['internalinterface', runner.opts.internalinterface])
        if runner.opts.internalport:
            final_args.extend(['internalport', runner.opts.internalport])
        if runner.opts.replicationport:
            final_args.extend(['replicationport', runner.opts.replicationport])
        if runner.opts.zkport:
            final_args.extend(['zkport', runner.opts.zkport])
        if runner.opts.externalinterface:
            final_args.extend(['externalinterface', runner.opts.externalinterface])
        if runner.opts.publicinterface:
            final_args.extend(['publicinterface', runner.opts.publicinterface])
        if self.subcommand in ('create'):
            if runner.opts.new:
                final_args.extend(['new'])
        if runner.args:
            final_args.extend(runner.args)
        kwargs = {}
        if self.supports_daemon and runner.opts.daemon:
            # Provide a default description if not specified.
            daemon_description = self.daemon_description
            if daemon_description is None:
                daemon_description = "VoltDB server"
            # Initialize all the daemon-related keyword arguments.
            runner.setup_daemon_kwargs(kwargs, name=self.daemon_name,
                                               description=daemon_description,
                                               output=self.daemon_output)
        else:
            # Replace the Python process.
            kwargs['exec'] = True
        self.run_java(verb, runner, *final_args, **kwargs)
Exemple #14
0
 def go(self, verb, runner):
     if self.check_environment_config:
         incompatible_options = checkconfig.test_hard_requirements()
         for k,v in  list(incompatible_options.items()):
             state = v[0]
             if state == 'PASS' :
                 pass
             elif state == "WARN":
                 utility.warning(v[1])
             elif state == 'FAIL' :
                 if k in list(checkconfig.skippableRequirements.keys()) and runner.opts.skip_requirements and checkconfig.skippableRequirements[k] in runner.opts.skip_requirements:
                     utility.warning(v[1])
                 else:
                     utility.abort(v[1])
             else:
                 utility.error(v[1])
     final_args = [self.subcommand]
     if self.safemode_available and runner.opts.safemode:
         final_args.extend(['safemode'])
     if runner.opts.placementgroup:
         final_args.extend(['placementgroup', runner.opts.placementgroup])
     if runner.opts.clientport:
         final_args.extend(['port', runner.opts.clientport])
     if runner.opts.adminport:
         final_args.extend(['adminport', runner.opts.adminport])
     if runner.opts.httpport:
         final_args.extend(['httpport', runner.opts.httpport])
     if runner.opts.statusport:
         final_args.extend(['statusport', runner.opts.statusport])
     if runner.opts.license:
         final_args.extend(['license', runner.opts.license])
     if runner.opts.internalinterface:
         final_args.extend(['internalinterface', runner.opts.internalinterface])
     if runner.opts.internalport:
         final_args.extend(['internalport', runner.opts.internalport])
     if runner.opts.replicationport:
         final_args.extend(['replicationport', runner.opts.replicationport])
     if runner.opts.zkport:
         final_args.extend(['zkport', runner.opts.zkport])
     if runner.opts.externalinterface:
         final_args.extend(['externalinterface', runner.opts.externalinterface])
     if runner.opts.publicinterface:
         final_args.extend(['publicinterface', runner.opts.publicinterface])
     if runner.opts.drpublic:
         final_args.extend(['drpublic', runner.opts.drpublic])
     if runner.opts.topicsport:
         final_args.extend(('topicsHostPort', runner.opts.topicsport))
     if runner.opts.topicspublic:
         final_args.extend(('topicspublic', runner.opts.topicspublic))
     if self.supports_paused and runner.opts.paused:
         final_args.extend(['paused'])
     if runner.args:
         final_args.extend(runner.args)
     kwargs = {}
     if self.supports_daemon and runner.opts.daemon:
         # Provide a default description if not specified.
         daemon_description = self.daemon_description
         if daemon_description is None:
             daemon_description = "VoltDB server"
         # Initialize all the daemon-related keyword arguments.
         runner.setup_daemon_kwargs(kwargs, name=self.daemon_name,
                                            description=daemon_description,
                                            output=self.daemon_output)
     else:
         # Replace the Python process.
         kwargs['exec'] = True
     self.run_java(verb, runner, *final_args, **kwargs)
Exemple #15
0
 def process_verb_arguments(self, verb, verb_args, verb_opts):
     """
     Validate the verb arguments. Check that required arguments are present
     and populate verb_opts attributes with scalar values or lists (for
     trailing arguments with max_count > 1).
     """
     # Add fixed arguments passed in through the decorator to the verb object.
     args = copy.copy(verb_args) + verb.command_arguments
     # Set attributes for required arguments.
     missing = []
     exceptions = []
     iarg = 0
     nargs = verb.get_argument_count()
     for arg in verb.iter_arguments():
         # It's missing if we've exhausted all the arguments before
         # exhausting all the argument specs, unless it's the last argument
         # spec and it's optional.
         if iarg > len(args) or (iarg == len(args) and arg.min_count > 0):
             if not arg.optional:
                 missing.append((arg.name, arg.help))
             else:
                 setattr(verb_opts, arg.name, None)
                 iarg += 1
         else:
             value = None
             # The last argument can have repeated arguments. If more than
             # one are allowed the values are put into a list.
             if iarg == nargs - 1 and arg.max_count > 1:
                 if len(args) - iarg < arg.min_count:
                     utility.abort(
                         'A minimum of %d %s arguments are required.' %
                         (arg.min_count, arg.name.upper()))
                 if len(args) - iarg > arg.max_count:
                     utility.abort(
                         'A maximum of %d %s arguments are allowed.' %
                         (arg.max_count, arg.name.upper()))
                 # Pass through argument class get() for validation, conversion, etc..
                 # Skip bad values and report on them at the end.
                 value = []
                 for v in args[iarg:]:
                     try:
                         value.append(arg.get(v))
                     except ArgumentException as e:
                         exceptions.append(e)
                 iarg = len(args)
             elif len(args) > 0:
                 # All other arguments are treated as scalars.
                 # Pass through argument class get() for validation, conversion, etc..
                 try:
                     value = arg.get(args[iarg])
                 except ArgumentException as e:
                     exceptions.append(e)
                 iarg += 1
             if value is not None or arg.min_count == 0:
                 setattr(verb_opts, arg.name, value)
     # Run the gauntlet of error disclosure. Abort and display usage as appropriate.
     had_errors = 0
     show_usage = False
     if exceptions:
         msg = 'Argument value %s:' % utility.pluralize(
             'error', len(exceptions))
         utility.error(msg, [str(e) for e in exceptions])
         had_errors += 1
     if iarg < len(args):
         self._abort('Extra arguments were provided:', args[iarg:])
         had_errors += 1
         show_usage = True
     if missing:
         fmt = '%%-%ds  %%s' % max([len(o) for (o, h) in missing])
         msg = 'Missing required %s:' % utility.pluralize(
             'argument', len(missing))
         utility.error(msg, [fmt % (o.upper(), h) for (o, h) in missing])
         had_errors += 1
         show_usage = True
     if had_errors > 0:
         if show_usage:
             self._abort()
         sys.exit(1)
Exemple #16
0
             # All other arguments are treated as scalars.
             # Pass through argument class get() for validation, conversion, etc..
             try:
                 value = arg.get(args[iarg])
             except ArgumentException, e:
                 exceptions.append(e)
             iarg += 1
         if value is not None:
             setattr(verb_opts, arg.name, value)
 # Run the gauntlet of error disclosure. Abort and display usage as appropriate.
 had_errors = 0
 show_usage = False
 if exceptions:
     msg = 'Argument value %s:' % utility.pluralize(
         'error', len(exceptions))
     utility.error(msg, [e.message for e in exceptions])
     had_errors += 1
 if iarg < len(args):
     self._abort('Extra arguments were provided:', args[iarg:])
     had_errors += 1
     show_usage = True
 if missing:
     fmt = '%%-%ds  %%s' % max([len(o) for (o, h) in missing])
     msg = 'Missing required %s:' % utility.pluralize(
         'argument', len(missing))
     utility.error(msg, [fmt % (o.upper(), h) for (o, h) in missing])
     had_errors += 1
     show_usage = True
 if had_errors > 0:
     if show_usage:
         self._abort()
Exemple #17
0
         elif len(args) > 0:
             # All other arguments are treated as scalars.
             # Pass through argument class get() for validation, conversion, etc..
             try:
                 value = arg.get(args[iarg])
             except ArgumentException, e:
                 exceptions.append(e)
             iarg += 1
         if value is not None or arg.min_count == 0:
             setattr(verb_opts, arg.name, value)
 # Run the gauntlet of error disclosure. Abort and display usage as appropriate.
 had_errors = 0
 show_usage = False
 if exceptions:
     msg = 'Argument value %s:' % utility.pluralize('error', len(exceptions))
     utility.error(msg, [str(e) for e in exceptions])
     had_errors += 1
 if iarg < len(args):
     self._abort('Extra arguments were provided:', args[iarg:])
     had_errors += 1
     show_usage = True
 if missing:
     fmt = '%%-%ds  %%s' % max([len(o) for (o, h) in missing])
     msg = 'Missing required %s:' % utility.pluralize('argument', len(missing))
     utility.error(msg, [fmt % (o.upper(), h) for (o, h) in missing])
     had_errors += 1
     show_usage = True
 if had_errors > 0:
     if show_usage:
         self._abort()
     sys.exit(1)
Exemple #18
0
 def error(self, *msgs):
     """
     Display ERROR level messages.
     """
     utility.error(*msgs)
Exemple #19
0
 def _abort(self, *msgs):
     utility.error(*msgs)
     sys.stdout.write('\n')
     self.print_help()
     sys.exit(1)
Exemple #20
0
    def go(self, verb, runner):
        if self.check_environment_config:
            incompatible_options = checkconfig.test_hard_requirements()
            for k, v in incompatible_options.items():
                state = v[0]
                if state == 'PASS':
                    pass
                elif state == "WARN":
                    utility.warning(v[1])
                elif state == 'FAIL':
                    if k in checkconfig.skippableRequirements.keys(
                    ) and runner.opts.skip_requirements and checkconfig.skippableRequirements[
                            k] in runner.opts.skip_requirements:
                        utility.warning(v[1])
                    else:
                        utility.abort(v[1])
                else:
                    utility.error(v[1])
        final_args = None
        if self.subcommand in ('create', 'recover', 'probe'):
            if runner.opts.replica:
                final_args = [self.subcommand, 'replica']
        if self.supports_live:
            if runner.opts.block:
                final_args = [self.subcommand]
            else:
                final_args = ['live', self.subcommand]
        elif final_args == None:
            final_args = [self.subcommand]
        if self.safemode_available:
            if runner.opts.safemode:
                final_args.extend(['safemode'])

        if self.needs_catalog:
            catalog = runner.opts.catalog
            if not catalog:
                catalog = runner.config.get('volt.catalog')
            if not catalog is None:
                final_args.extend(['catalog', catalog])

        if self.is_legacy_verb and runner.opts.deployment:
            final_args.extend(['deployment', runner.opts.deployment])
        if runner.opts.placementgroup:
            final_args.extend(['placementgroup', runner.opts.placementgroup])
        if self.is_legacy_verb and runner.opts.host:
            final_args.extend(['host', runner.opts.host])
        elif not self.subcommand in ('initialize', 'probe'):
            utility.abort('host is required.')
        if runner.opts.clientport:
            final_args.extend(['port', runner.opts.clientport])
        if runner.opts.adminport:
            final_args.extend(['adminport', runner.opts.adminport])
        if runner.opts.httpport:
            final_args.extend(['httpport', runner.opts.httpport])
        if runner.opts.statusport:
            final_args.extend(['statusport', runner.opts.statusport])
        if runner.opts.license:
            final_args.extend(['license', runner.opts.license])
        if runner.opts.internalinterface:
            final_args.extend(
                ['internalinterface', runner.opts.internalinterface])
        if runner.opts.internalport:
            final_args.extend(['internalport', runner.opts.internalport])
        if runner.opts.replicationport:
            final_args.extend(['replicationport', runner.opts.replicationport])
        if runner.opts.zkport:
            final_args.extend(['zkport', runner.opts.zkport])
        if runner.opts.externalinterface:
            final_args.extend(
                ['externalinterface', runner.opts.externalinterface])
        if runner.opts.publicinterface:
            final_args.extend(['publicinterface', runner.opts.publicinterface])
        if runner.opts.drpublic:
            final_args.extend(['drpublic', runner.opts.drpublic])
        if runner.opts.topicsport:
            final_args.extend(('topicsHostPort', runner.opts.topicsport))
        if self.subcommand in ('create', 'initialize'):
            if runner.opts.force:
                final_args.extend(['force'])
        if self.subcommand in ('create', 'probe', 'recover'):
            if runner.opts.paused:
                final_args.extend(['paused'])
        if runner.args:
            final_args.extend(runner.args)
        kwargs = {}
        if self.supports_daemon and runner.opts.daemon:
            # Provide a default description if not specified.
            daemon_description = self.daemon_description
            if daemon_description is None:
                daemon_description = "VoltDB server"
            # Initialize all the daemon-related keyword arguments.
            runner.setup_daemon_kwargs(kwargs,
                                       name=self.daemon_name,
                                       description=daemon_description,
                                       output=self.daemon_output)
        else:
            # Replace the Python process.
            kwargs['exec'] = True
        self.run_java(verb, runner, *final_args, **kwargs)
Exemple #21
0
    def go(self, verb, runner):
        if self.check_environment_config:
            incompatible_options = checkconfig.test_hard_requirements()
            for k, v in incompatible_options.items():
                state = v[0]
                if state == "PASS":
                    pass
                elif state == "WARN":
                    utility.warning(v[1])
                elif state == "FAIL":
                    if (
                        k in checkconfig.skippableRequirements.keys()
                        and runner.opts.skip_requirements
                        and checkconfig.skippableRequirements[k] in runner.opts.skip_requirements
                    ):
                        utility.warning(v[1])
                    else:
                        utility.abort(v[1])
                else:
                    utility.error(v[1])
        final_args = None
        if self.subcommand in ("create", "recover"):
            if runner.opts.replica:
                final_args = [self.subcommand, "replica"]
        if self.supports_live:
            if runner.opts.block:
                final_args = [self.subcommand]
            else:
                final_args = ["live", self.subcommand]
        elif final_args == None:
            final_args = [self.subcommand]
        if self.safemode_available:
            if runner.opts.safemode:
                final_args.extend(["safemode"])

        if self.needs_catalog:
            catalog = runner.opts.catalog
            if not catalog:
                catalog = runner.config.get("volt.catalog")
            if not catalog is None:
                final_args.extend(["catalog", catalog])

        if runner.opts.deployment:
            final_args.extend(["deployment", runner.opts.deployment])
        if runner.opts.placementgroup:
            final_args.extend(["placementgroup", runner.opts.placementgroup])
        if runner.opts.host:
            final_args.extend(["host", runner.opts.host])
        else:
            utility.abort("host is required.")
        if runner.opts.clientport:
            final_args.extend(["port", runner.opts.clientport])
        if runner.opts.adminport:
            final_args.extend(["adminport", runner.opts.adminport])
        if runner.opts.httpport:
            final_args.extend(["httpport", runner.opts.httpport])
        if runner.opts.license:
            final_args.extend(["license", runner.opts.license])
        if runner.opts.internalinterface:
            final_args.extend(["internalinterface", runner.opts.internalinterface])
        if runner.opts.internalport:
            final_args.extend(["internalport", runner.opts.internalport])
        if runner.opts.replicationport:
            final_args.extend(["replicationport", runner.opts.replicationport])
        if runner.opts.zkport:
            final_args.extend(["zkport", runner.opts.zkport])
        if runner.opts.externalinterface:
            final_args.extend(["externalinterface", runner.opts.externalinterface])
        if runner.opts.publicinterface:
            final_args.extend(["publicinterface", runner.opts.publicinterface])
        if runner.args:
            final_args.extend(runner.args)
        kwargs = {}
        if self.supports_daemon and runner.opts.daemon:
            # Provide a default description if not specified.
            daemon_description = self.daemon_description
            if daemon_description is None:
                daemon_description = "VoltDB server"
            # Initialize all the daemon-related keyword arguments.
            runner.setup_daemon_kwargs(
                kwargs, name=self.daemon_name, description=daemon_description, output=self.daemon_output
            )
        else:
            # Replace the Python process.
            kwargs["exec"] = True
        self.run_java(verb, runner, *final_args, **kwargs)