diff options
author | Aravinda VK <avishwan@redhat.com> | 2016-06-23 11:53:36 +0530 |
---|---|---|
committer | Aravinda VK <avishwan@redhat.com> | 2016-07-28 03:46:24 -0700 |
commit | deaecdf4320be44ae4a8300c969f724582959067 (patch) | |
tree | 3cbc29ffc0f59c09e1765f4ed0b2c55d476fe9aa /geo-replication/syncdaemon/configinterface.py.in | |
parent | bda4a2be0bba608d61bd04815e92b2d4cc63e7f2 (diff) |
geo-rep: Handle Config parser errors
Python ConfigParser lib has two methods, readfp and read, it should
be used as follows.
readfp(open("defaults.conf"))
read("custom.conf")
ConfigParser.read(path) ignores any file errors, which is intentional
since errors are handled while loading default config.
Geo-rep uses only one config file(Session config in Master side and
Template config on Slave side) so we should use readfp to avoid
skipping OS errors.
config.read is retained in case of `--config-set-rx` where glusterd
creates new template config file.
BUG: 1357759
Change-Id: I15a14d3743facd7b8c7af0edc70fdefaa43efd04
Signed-off-by: Aravinda VK <avishwan@redhat.com>
Reviewed-on: http://review.gluster.org/14777
(cherry picked from commit d94bf608b16b82f2c8f8588a96459cb746773b32)
Reviewed-on: http://review.gluster.org/14946
Smoke: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
Reviewed-by: Kotresh HR <khiremat@redhat.com>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Diffstat (limited to 'geo-replication/syncdaemon/configinterface.py.in')
-rw-r--r-- | geo-replication/syncdaemon/configinterface.py.in | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/geo-replication/syncdaemon/configinterface.py.in b/geo-replication/syncdaemon/configinterface.py.in index 5d67b8a471a..e1cf007a2b8 100644 --- a/geo-replication/syncdaemon/configinterface.py.in +++ b/geo-replication/syncdaemon/configinterface.py.in @@ -30,6 +30,7 @@ config_version = 2.0 re_type = type(re.compile('')) +TMPL_CONFIG_FILE = "@GLUSTERD_WORKDIR@/geo-replication/gsyncd_template.conf" # (SECTION, OPTION, OLD VALUE, NEW VALUE) CONFIGS = ( @@ -79,10 +80,17 @@ CONFIGS = ( ) -def upgrade_config_file(path): +def upgrade_config_file(path, confdata): config_change = False config = ConfigParser.RawConfigParser() - config.read(path) + # If confdata.rx present then glusterd is adding config values, + # it will create config file if not exists. config.read is fine in + # this case since any other error will be raised during write. + if getattr(confdata, "rx", False): + config.read(path) + else: + with open(path) as fp: + config.readfp(fp) for sec, opt, oldval, newval in CONFIGS: try: @@ -190,7 +198,7 @@ class GConffile(object): s2[k] = v self.config._sections[n] = s2 - def __init__(self, path, peers, *dd): + def __init__(self, path, peers, confdata, *dd): """ - .path: location of config file - .config: underlying ConfigParser instance @@ -202,7 +210,12 @@ class GConffile(object): self.path = path self.auxdicts = dd self.config = ConfigParser.RawConfigParser() - self.config.read(path) + if getattr(confdata, "rx", False): + self.config.read(path) + else: + with open(path) as fp: + self.config.readfp(fp) + self.dev, self.ino, self.mtime = -1, -1, -1 self._normconfig() @@ -217,7 +230,8 @@ class GConffile(object): sres = None self.config = ConfigParser.RawConfigParser() - self.config.read(self.path) + with open(self.path) as fp: + self.config.readfp(fp) self._normconfig() def get_realtime(self, opt): |