Re: [PATCH] nilfs2_ss_manager: handle error during loading conffile
Hi,
Thank you for the patch!
I applied the patch with following slight modifications.
- introduce new Exception NILFSConfigurationException
- raise exception instead of exit(1)
- catch the exception and print the errors
- use problem_mark when both context_mark and problem_mark exist
- add +1 for mark.line / mark.column. It seems to be started from 0.
--
Jiro SEKIBA <jir@xxxxxxxxx>
At Sun, 6 Feb 2011 01:26:04 +0900,
Ryusuke Konishi wrote:
>
> The error messages printed when failed to load the config file are
> confusing. This makes it better.
>
> Signed-off-by: Ryusuke Konishi <ryusuke@xxxxxxxx>
> ---
> nilfs2_ss_manager/nilfs2_ss_manager | 39 ++++++++++++++++++++++++++--------
> 1 files changed, 30 insertions(+), 9 deletions(-)
>
> diff --git a/nilfs2_ss_manager/nilfs2_ss_manager b/nilfs2_ss_manager/nilfs2_ss_manager
> index 6668127..34b887d 100755
> --- a/nilfs2_ss_manager/nilfs2_ss_manager
> +++ b/nilfs2_ss_manager/nilfs2_ss_manager
> @@ -123,6 +123,20 @@ def register_sighandlers(managers, mainloop):
> signal.signal(signal.SIGINT, do_exit)
> signal.signal(signal.SIGTERM, do_exit)
>
> +def check_configuration(conf, conffile, logger):
> + errors = []
> + for key in ['devices', 'period', 'pidfile']:
> + if not key in conf:
> + errors.append("No '%s' key defined" % key)
> + elif not conf[key]:
> + errors.append("'%s' key has no value" % key)
> +
> + if len(errors) > 0:
> + logger.out(syslog.LOG_ERR, "Configuration error in %s" % conffile)
> + for error in errors:
> + logger.out(syslog.LOG_ERR, " " + error),
> + exit(1)
> +
> logger = Logger()
> try:
> parser = argparse.ArgumentParser(description="NILFS2 snapshot manager")
> @@ -139,6 +153,8 @@ try:
> daemonize = args.daemonize
>
> conf = yaml.safe_load(open(conffile))
> + check_configuration(conf, conffile, logger)
> +
> devices = conf['devices']
> period = conf['period']
>
> @@ -159,12 +175,17 @@ try:
> register_sighandlers(managers, mainloop)
> mainloop.run()
>
> -except yaml.scanner.ScannerError:
> - logger.out(syslog.LOG_INFO, "can not parse config file %s" % conffile)
> -
> -except KeyError:
> - logger.out(syslog.LOG_INFO, "configuration error: %s" % conffile)
> - for key in ['devices', 'period', 'pidfile']:
> - if not key in conf:
> - logger.out(syslog.LOG_INFO,
> - "'%s' is not in the configuration" % key)
> +except yaml.YAMLError, e:
> + pos = None
> + if (hasattr(e, 'problem') and hasattr(e, 'context_mark') and
> + hasattr(e, 'problem_mark')):
> + if e.context_mark is not None:
> + pos = (e.context_mark.line, e.context_mark.column)
> + elif e.problem_mark is not None:
> + pos = (e.problem_mark.line, e.problem_mark.column)
> +
> + logger.out(syslog.LOG_ERR, "Error" +
> + (" near line %s, column %s" % pos if pos else "") +
> + " while loading " + conffile)
> + if hasattr(e, 'problem') and (e.problem is not None):
> + logger.out(syslog.LOG_ERR, " Reason: %s" % e.problem)
> --
> 1.7.2.3
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nilfs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-nilfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
[Linux Filesystem; Devel]
[Linux CIFS]
[Linux USB Devel]
[Video for Linux]
[Linux Audio Users]
[Photo]
[Yosemite News]
[Yosemite Photos]
[Free Online Dating]
[Linux Kernel]
[Linux SCSI]
[XFree86]