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