Re: [PATCH] Fix autotest client when checking only client from svn

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This looks good to me.

-- John

On Tue, Dec 1, 2009 at 2:37 PM, Lucas Meneghel Rodrigues <lmr@xxxxxxxxxx> wrote:
> When the client was made configurable through
> global_config.ini, the scenario "developer
> checking out client directory only" wasn't
> considered, and an exception will be thrown
> due to the lack of a global_config.ini present.
>
> In order to fix this, instead of throwing an
> exception, just print a warning on cases that
> matter, and make all the values that are
> supposed to be grabbed from the config file
> to have a sensible default.
>
> 2nd try: Now a warning is printed only when
> autotest is being run through autoserv, since
> it's probably the only case worth printing
> a warning.
>
> Signed-off-by: Lucas Meneghel Rodrigues <lmr@xxxxxxxxxx>
> ---
>  client/bin/autotest                   |    3 ++-
>  client/bin/harness_autoserv.py        |   15 ++++++++++++++-
>  client/bin/job.py                     |    2 +-
>  client/common_lib/global_config.py    |   17 ++++++++---------
>  client/common_lib/host_protections.py |    9 ++++-----
>  5 files changed, 29 insertions(+), 17 deletions(-)
>
> diff --git a/client/bin/autotest b/client/bin/autotest
> index 285be4e..c83e755 100755
> --- a/client/bin/autotest
> +++ b/client/bin/autotest
> @@ -61,7 +61,8 @@ if len(args) != 1:
>
>  drop_caches = global_config.global_config.get_config_value('CLIENT',
>                                                            'drop_caches',
> -                                                           type=bool)
> +                                                           type=bool,
> +                                                           default=True)
>
>  # JOB: run the specified job control file.
>  job.runjob(os.path.realpath(args[0]), drop_caches, options)
> diff --git a/client/bin/harness_autoserv.py b/client/bin/harness_autoserv.py
> index 4ea16e4..0bfbcdd 100644
> --- a/client/bin/harness_autoserv.py
> +++ b/client/bin/harness_autoserv.py
> @@ -1,5 +1,6 @@
> -import os, logging
> +import os, logging, ConfigParser
>  from autotest_lib.client.common_lib import autotemp, base_packages, error
> +from autotest_lib.client.common_lib import global_config
>  from autotest_lib.client.bin import harness
>
>
> @@ -20,6 +21,18 @@ class harness_autoserv(harness.harness):
>         super(harness_autoserv, self).__init__(job)
>         self.status = os.fdopen(3, 'w', 0)
>
> +        # If a bug on the client run code prevents global_config.ini
> +        # from being copied to the client machine, the client will run
> +        # without a global config, relying only on the defaults of the
> +        # config items. To avoid that happening silently, the check below
> +        # was written.
> +        try:
> +            cfg = global_config.global_config.get_section_values("CLIENT")
> +        except ConfigParser.NoSectionError:
> +            logging.error("Empty CLIENT configuration session. "
> +                          "global_config.ini missing. This probably means "
> +                          "a bug on the server code. Please verify.")
> +
>
>     def run_start(self):
>         # set up the package fetcher for direct-from-autoserv fetches
> diff --git a/client/bin/job.py b/client/bin/job.py
> index 7021105..f879100 100755
> --- a/client/bin/job.py
> +++ b/client/bin/job.py
> @@ -233,7 +233,7 @@ class base_client_job(base_job.base_job):
>         self.drop_caches_between_iterations = (
>                        global_config.global_config.get_config_value('CLIENT',
>                                             'drop_caches_between_iterations',
> -                                            type=bool))
> +                                            type=bool, default=True))
>         self.drop_caches = drop_caches
>         if self.drop_caches:
>             logging.debug("Dropping caches")
> diff --git a/client/common_lib/global_config.py b/client/common_lib/global_config.py
> index 04ab7ff..24a93ea 100644
> --- a/client/common_lib/global_config.py
> +++ b/client/common_lib/global_config.py
> @@ -5,7 +5,7 @@ provides access to global configuration file
>
>  __author__ = 'raphtee@xxxxxxxxxx (Travis Miller)'
>
> -import os, sys, ConfigParser
> +import os, sys, ConfigParser, logging
>  from autotest_lib.client.common_lib import error
>
>
> @@ -44,11 +44,9 @@ elif config_in_client:
>     DEFAULT_SHADOW_FILE = None
>     RUNNING_STAND_ALONE_CLIENT = True
>  else:
> -    raise ConfigError("Could not find configuration files "
> -                      "needed for this program to function. Please refer to "
> -                      "http://autotest.kernel.org/wiki/GlobalConfig "
> -                      "for more info.")
> -
> +    DEFAULT_CONFIG_FILE = None
> +    DEFAULT_SHADOW_FILE = None
> +    RUNNING_STAND_ALONE_CLIENT = True
>
>  class global_config(object):
>     _NO_DEFAULT_SPECIFIED = object()
> @@ -145,10 +143,11 @@ class global_config(object):
>
>
>     def parse_config_file(self):
> -        if not os.path.exists(self.config_file):
> -            raise ConfigError('%s not found' % (self.config_file))
>         self.config = ConfigParser.ConfigParser()
> -        self.config.read(self.config_file)
> +        if self.config_file and os.path.exists(self.config_file):
> +            self.config.read(self.config_file)
> +        else:
> +            raise ConfigError('%s not found' % (self.config_file))
>
>         # now also read the shadow file if there is one
>         # this will overwrite anything that is found in the
> diff --git a/client/common_lib/host_protections.py b/client/common_lib/host_protections.py
> index 7c9e6a0..b5b2156 100644
> --- a/client/common_lib/host_protections.py
> +++ b/client/common_lib/host_protections.py
> @@ -29,16 +29,15 @@ try:
>     default_protection = global_config.global_config.get_config_value(
>                             'HOSTS', 'default_protection', default=_bad_value)
>     if default_protection == _bad_value:
> -        if running_client:
> -            logging.debug('Client stand alone run detected. '
> -                          'host_protection.default will not be set.')
> -        else:
> +        if not running_client:
>             raise global_config.ConfigError(
>                 'No HOSTS.default_protection defined in global_config.ini')
>     else:
>         default = Protection.get_value(default_protection)
>
> +# It is OK to have an empty global configuration object (stand alone client)
> +# so we trap this exception.
>  except global_config.ConfigError:
> -    raise global_config.ConfigError('No global_config.ini exists, aborting')
> +    pass
>
>  choices = Protection.choices()
> --
> 1.6.5.2
>
>
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux