diff options
| author | Shwetha K Acharya <sacharya@redhat.com> | 2019-05-29 16:49:01 +0530 | 
|---|---|---|
| committer | Kotresh HR <khiremat@redhat.com> | 2019-10-22 18:20:27 +0530 | 
| commit | 9f26bb9522ade281d794ef8c2e3a5cb00612cfed (patch) | |
| tree | 735dce0683f9d7445884b7bb7151016cdf2b4f52 | |
| parent | 938efb6fc2552baef0f0dc65918d181d49b5ff40 (diff) | |
geo-rep: Upgrading config file to new version
- configuration handling is enhanced with patch
https://review.gluster.org/#/c/glusterfs/+/18257/
- hence, the old configurations are not applied when
Geo-rep session is created in the old version and upgraded.
This patch solves the issue. It,
- checks if the config file is old.
- parses required values from old config file and stores in new
  config file, which ensures that configerations are applied on
  upgrade.
- stores old config file as backup.
- handles changes in options introduced in
  https://review.gluster.org/#/c/glusterfs/+/18257/
Backport of:
 > Patch: https://review.gluster.org/22894
 > BUG: bz#1707731
 > Change-Id: Iad8da6c1e1ae8ecf7c84dfdf8ea3ac6966d8a2a0
 > Signed-off-by: Shwetha K Acharya <sacharya@redhat.com>
updates: bz#1764171
Change-Id: Iad8da6c1e1ae8ecf7c84dfdf8ea3ac6966d8a2a0
Signed-off-by: Kotresh HR <khiremat@redhat.com>
| -rw-r--r-- | geo-replication/syncdaemon/gsyncd.py | 5 | ||||
| -rw-r--r-- | geo-replication/syncdaemon/gsyncdconfig.py | 41 | 
2 files changed, 46 insertions, 0 deletions
| diff --git a/geo-replication/syncdaemon/gsyncd.py b/geo-replication/syncdaemon/gsyncd.py index effe0ce6aa2..a4c6f32f135 100644 --- a/geo-replication/syncdaemon/gsyncd.py +++ b/geo-replication/syncdaemon/gsyncd.py @@ -253,6 +253,11 @@ def main():      if args.subcmd == "slave":          override_from_args = True +    if args.subcmd == "monitor": +        ret = gconf.is_config_file_old(config_file, args.master, extra_tmpl_args["slavevol"]) +        if ret is not None: +           gconf.config_upgrade(config_file, ret) +      # Load Config file      gconf.load(GLUSTERFS_CONFDIR + "/gsyncd.conf",                 config_file, diff --git a/geo-replication/syncdaemon/gsyncdconfig.py b/geo-replication/syncdaemon/gsyncdconfig.py index 26fb6a57318..68d1b489e23 100644 --- a/geo-replication/syncdaemon/gsyncdconfig.py +++ b/geo-replication/syncdaemon/gsyncdconfig.py @@ -14,6 +14,7 @@ try:  except ImportError:      from configparser import ConfigParser, NoSectionError  import os +import shutil  from string import Template  from datetime import datetime @@ -328,6 +329,46 @@ class Gconf(object):          return False +def is_config_file_old(config_file, mastervol, slavevol): +    cnf = ConfigParser() +    cnf.read(config_file) +    session_section = "peers %s %s" % (mastervol, slavevol) +    try: +        return dict(cnf.items(session_section)) +    except NoSectionError: +        return None + +def config_upgrade(config_file, ret): +    config_file_backup = os.path.join(os.path.dirname(config_file), "gsyncd.conf.bkp") + +    #copy old config file in a backup file +    shutil.copyfile(config_file, config_file_backup) + +    #write a new config file +    config = ConfigParser() +    config.add_section('vars') + +    for key, value in ret.items(): +        #handle option name changes +        if key == "use_tarssh": +            new_key = "sync-method" +            if value == "true": +                new_value = "tarssh" +            else: +                new_value = "rsync" +                config.set('vars', new_key, new_value) + +        if key == "timeout": +            new_key = "slave-timeout" +            config.set('vars', new_key, value) + +        #for changes like: ignore_deletes to ignore-deletes +        new_key = key.replace("_", "-") +        config.set('vars', new_key, value) + +    with open(config_file, 'w') as configfile: +        config.write(configfile) +  def validate_int(value):      try: | 
