74b1de
From 2b1738402276f43d7cb64542b74cb50145e46d77 Mon Sep 17 00:00:00 2001
74b1de
From: Kotresh HR <khiremat@redhat.com>
74b1de
Date: Wed, 16 Oct 2019 14:25:47 +0530
74b1de
Subject: [PATCH 309/309] geo-rep: Fix config upgrade on non-participating node
74b1de
74b1de
After upgrade, if the config files are of old format, it
74b1de
gets migrated to new format. Monitor process migrates it.
74b1de
Since monitor doesn't run on nodes where bricks are not
74b1de
hosted, it doesn't get migrated there. So this patch fixes
74b1de
the config upgrade on nodes which doesn't host bricks.
74b1de
This happens during config either on get/set/reset.
74b1de
74b1de
Backport of:
74b1de
 > Patch: https://review.gluster.org/23555
74b1de
 > Change-Id: Ibade2f2310b0f3affea21a3baa1ae0eb71162cba
74b1de
 > Signed-off-by: Kotresh HR <khiremat@redhat.com>
74b1de
 > fixes: bz#1762220
74b1de
74b1de
Change-Id: Ibade2f2310b0f3affea21a3baa1ae0eb71162cba
74b1de
Signed-off-by: Kotresh HR <khiremat@redhat.com>
74b1de
BUG: 1760939
74b1de
Reviewed-on: https://code.engineering.redhat.com/gerrit/183461
74b1de
Tested-by: RHGS Build Bot <nigelb@redhat.com>
74b1de
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
74b1de
---
74b1de
 geo-replication/syncdaemon/gsyncd.py     |   3 +-
74b1de
 tests/00-geo-rep/georep-config-upgrade.t | 132 +++++++++++++++++++++++++++++++
74b1de
 tests/00-geo-rep/gsyncd.conf.old         |  47 +++++++++++
74b1de
 3 files changed, 181 insertions(+), 1 deletion(-)
74b1de
 create mode 100644 tests/00-geo-rep/georep-config-upgrade.t
74b1de
 create mode 100644 tests/00-geo-rep/gsyncd.conf.old
74b1de
74b1de
diff --git a/geo-replication/syncdaemon/gsyncd.py b/geo-replication/syncdaemon/gsyncd.py
74b1de
index 6ae5269..7b48d82 100644
74b1de
--- a/geo-replication/syncdaemon/gsyncd.py
74b1de
+++ b/geo-replication/syncdaemon/gsyncd.py
74b1de
@@ -255,7 +255,8 @@ def main():
74b1de
     if args.subcmd == "slave":
74b1de
         override_from_args = True
74b1de
 
74b1de
-    if args.subcmd == "monitor":
74b1de
+    if config_file is not None and \
74b1de
+       args.subcmd in ["monitor", "config-get", "config-set", "config-reset"]:
74b1de
         ret = gconf.is_config_file_old(config_file, args.master, extra_tmpl_args["slavevol"])
74b1de
         if ret is not None:
74b1de
            gconf.config_upgrade(config_file, ret)
74b1de
diff --git a/tests/00-geo-rep/georep-config-upgrade.t b/tests/00-geo-rep/georep-config-upgrade.t
74b1de
new file mode 100644
74b1de
index 0000000..557461c
74b1de
--- /dev/null
74b1de
+++ b/tests/00-geo-rep/georep-config-upgrade.t
74b1de
@@ -0,0 +1,132 @@
74b1de
+#!/bin/bash
74b1de
+
74b1de
+. $(dirname $0)/../include.rc
74b1de
+. $(dirname $0)/../volume.rc
74b1de
+. $(dirname $0)/../geo-rep.rc
74b1de
+. $(dirname $0)/../env.rc
74b1de
+
74b1de
+SCRIPT_TIMEOUT=300
74b1de
+OLD_CONFIG_PATH=$(dirname $0)/gsyncd.conf.old
74b1de
+WORKING_DIR=/var/lib/glusterd/geo-replication/master_127.0.0.1_slave
74b1de
+
74b1de
+##Cleanup and start glusterd
74b1de
+cleanup;
74b1de
+TEST glusterd;
74b1de
+TEST pidof glusterd
74b1de
+
74b1de
+##Variables
74b1de
+GEOREP_CLI="$CLI volume geo-replication"
74b1de
+master=$GMV0
74b1de
+SH0="127.0.0.1"
74b1de
+slave=${SH0}::${GSV0}
74b1de
+num_active=2
74b1de
+num_passive=2
74b1de
+master_mnt=$M0
74b1de
+slave_mnt=$M1
74b1de
+
74b1de
+############################################################
74b1de
+#SETUP VOLUMES AND GEO-REPLICATION
74b1de
+############################################################
74b1de
+
74b1de
+##create_and_start_master_volume
74b1de
+TEST $CLI volume create $GMV0 replica 2 $H0:$B0/${GMV0}{1,2,3,4};
74b1de
+TEST $CLI volume start $GMV0
74b1de
+
74b1de
+##create_and_start_slave_volume
74b1de
+TEST $CLI volume create $GSV0 replica 2 $H0:$B0/${GSV0}{1,2,3,4};
74b1de
+TEST $CLI volume start $GSV0
74b1de
+
74b1de
+##Create, start and mount meta_volume
74b1de
+TEST $CLI volume create $META_VOL replica 3 $H0:$B0/${META_VOL}{1,2,3};
74b1de
+TEST $CLI volume start $META_VOL
74b1de
+TEST mkdir -p $META_MNT
74b1de
+TEST glusterfs -s $H0 --volfile-id $META_VOL $META_MNT
74b1de
+
74b1de
+##Mount master
74b1de
+TEST glusterfs -s $H0 --volfile-id $GMV0 $M0
74b1de
+
74b1de
+##Mount slave
74b1de
+TEST glusterfs -s $H0 --volfile-id $GSV0 $M1
74b1de
+
74b1de
+############################################################
74b1de
+#BASIC GEO-REPLICATION TESTS
74b1de
+############################################################
74b1de
+
74b1de
+#Create geo-rep session
74b1de
+TEST create_georep_session $master $slave
74b1de
+
74b1de
+#Config gluster-command-dir
74b1de
+TEST $GEOREP_CLI $master $slave config gluster-command-dir ${GLUSTER_CMD_DIR}
74b1de
+
74b1de
+#Config gluster-command-dir
74b1de
+TEST $GEOREP_CLI $master $slave config slave-gluster-command-dir ${GLUSTER_CMD_DIR}
74b1de
+
74b1de
+#Enable_metavolume
74b1de
+TEST $GEOREP_CLI $master $slave config use_meta_volume true
74b1de
+
74b1de
+#Wait for common secret pem file to be created
74b1de
+EXPECT_WITHIN $GEO_REP_TIMEOUT  0 check_common_secret_file
74b1de
+
74b1de
+#Verify the keys are distributed
74b1de
+EXPECT_WITHIN $GEO_REP_TIMEOUT  0 check_keys_distributed
74b1de
+
74b1de
+#Start_georep
74b1de
+TEST $GEOREP_CLI $master $slave start
74b1de
+
74b1de
+EXPECT_WITHIN $GEO_REP_TIMEOUT  2 check_status_num_rows "Active"
74b1de
+EXPECT_WITHIN $GEO_REP_TIMEOUT  2 check_status_num_rows "Passive"
74b1de
+
74b1de
+TEST $GEOREP_CLI $master $slave config sync-method tarssh
74b1de
+
74b1de
+#Stop Geo-rep
74b1de
+TEST $GEOREP_CLI $master $slave stop
74b1de
+
74b1de
+#Copy old config file
74b1de
+mv -f $WORKING_DIR/gsyncd.conf $WORKING_DIR/gsyncd.conf.org
74b1de
+cp -p $OLD_CONFIG_PATH $WORKING_DIR/gsyncd.conf
74b1de
+
74b1de
+#Check if config get all updates config_file
74b1de
+TEST ! grep "sync-method" $WORKING_DIR/gsyncd.conf
74b1de
+TEST $GEOREP_CLI $master $slave config
74b1de
+TEST grep "sync-method" $WORKING_DIR/gsyncd.conf
74b1de
+
74b1de
+#Check if config get updates config_file
74b1de
+rm -f $WORKING_DIR/gsyncd.conf
74b1de
+cp -p $OLD_CONFIG_PATH $WORKING_DIR/gsyncd.conf
74b1de
+TEST ! grep "sync-method" $WORKING_DIR/gsyncd.conf
74b1de
+TEST $GEOREP_CLI $master $slave config sync-method
74b1de
+TEST grep "sync-method" $WORKING_DIR/gsyncd.conf
74b1de
+
74b1de
+#Check if config set updates config_file
74b1de
+rm -f $WORKING_DIR/gsyncd.conf
74b1de
+cp -p $OLD_CONFIG_PATH $WORKING_DIR/gsyncd.conf
74b1de
+TEST ! grep "sync-method" $WORKING_DIR/gsyncd.conf
74b1de
+TEST $GEOREP_CLI $master $slave config sync-xattrs false
74b1de
+TEST grep "sync-method" $WORKING_DIR/gsyncd.conf
74b1de
+
74b1de
+#Check if config reset updates config_file
74b1de
+rm -f $WORKING_DIR/gsyncd.conf
74b1de
+cp -p $OLD_CONFIG_PATH $WORKING_DIR/gsyncd.conf
74b1de
+TEST ! grep "sync-method" $WORKING_DIR/gsyncd.conf
74b1de
+TEST $GEOREP_CLI $master $slave config \!sync-xattrs
74b1de
+TEST grep "sync-method" $WORKING_DIR/gsyncd.conf
74b1de
+
74b1de
+#Check if geo-rep start updates config_file
74b1de
+rm -f $WORKING_DIR/gsyncd.conf
74b1de
+cp -p $OLD_CONFIG_PATH $WORKING_DIR/gsyncd.conf
74b1de
+TEST ! grep "sync-method" $WORKING_DIR/gsyncd.conf
74b1de
+TEST $GEOREP_CLI $master $slave start
74b1de
+TEST grep "sync-method" $WORKING_DIR/gsyncd.conf
74b1de
+
74b1de
+#Stop geo-rep
74b1de
+TEST $GEOREP_CLI $master $slave stop
74b1de
+
74b1de
+#Delete Geo-rep
74b1de
+TEST $GEOREP_CLI $master $slave delete
74b1de
+
74b1de
+#Cleanup authorized keys
74b1de
+sed -i '/^command=.*SSH_ORIGINAL_COMMAND#.*/d' ~/.ssh/authorized_keys
74b1de
+sed -i '/^command=.*gsyncd.*/d' ~/.ssh/authorized_keys
74b1de
+
74b1de
+cleanup;
74b1de
+#G_TESTDEF_TEST_STATUS_NETBSD7=BAD_TEST,BUG=000000
74b1de
diff --git a/tests/00-geo-rep/gsyncd.conf.old b/tests/00-geo-rep/gsyncd.conf.old
74b1de
new file mode 100644
74b1de
index 0000000..519acaf
74b1de
--- /dev/null
74b1de
+++ b/tests/00-geo-rep/gsyncd.conf.old
74b1de
@@ -0,0 +1,47 @@
74b1de
+[__meta__]
74b1de
+version = 2.0
74b1de
+
74b1de
+[peersrx . .]
74b1de
+remote_gsyncd = /usr/local/libexec/glusterfs/gsyncd
74b1de
+georep_session_working_dir = /var/lib/glusterd/geo-replication/${mastervol}_${remotehost}_${slavevol}/
74b1de
+ssh_command_tar = ssh -oPasswordAuthentication=no -oStrictHostKeyChecking=no -i /var/lib/glusterd/geo-replication/tar_ssh.pem
74b1de
+changelog_log_file = /var/log/glusterfs/geo-replication/${mastervol}/${eSlave}${local_id}-changes.log
74b1de
+working_dir = /var/lib/misc/glusterfsd/${mastervol}/${eSlave}
74b1de
+ignore_deletes = false
74b1de
+pid_file = /var/lib/glusterd/geo-replication/${mastervol}_${remotehost}_${slavevol}/monitor.pid
74b1de
+state_file = /var/lib/glusterd/geo-replication/${mastervol}_${remotehost}_${slavevol}/monitor.status
74b1de
+gluster_command_dir = /usr/local/sbin/
74b1de
+gluster_params = aux-gfid-mount acl
74b1de
+ssh_command = ssh -oPasswordAuthentication=no -oStrictHostKeyChecking=no -i /var/lib/glusterd/geo-replication/secret.pem
74b1de
+state_detail_file = /var/lib/glusterd/geo-replication/${mastervol}_${remotehost}_${slavevol}/${eSlave}-detail.status
74b1de
+state_socket_unencoded = /var/lib/glusterd/geo-replication/${mastervol}_${remotehost}_${slavevol}/${eSlave}.socket
74b1de
+socketdir = /var/run/gluster
74b1de
+log_file = /var/log/glusterfs/geo-replication/${mastervol}/${eSlave}.log
74b1de
+gluster_log_file = /var/log/glusterfs/geo-replication/${mastervol}/${eSlave}${local_id}.gluster.log
74b1de
+special_sync_mode = partial
74b1de
+change_detector = changelog
74b1de
+pid-file = /var/lib/glusterd/geo-replication/${mastervol}_${remotehost}_${slavevol}/monitor.pid
74b1de
+state-file = /var/lib/glusterd/geo-replication/${mastervol}_${remotehost}_${slavevol}/monitor.status
74b1de
+
74b1de
+[__section_order__]
74b1de
+peersrx . . = 0
74b1de
+peersrx . %5essh%3a = 2
74b1de
+peersrx . = 3
74b1de
+peers master slave = 4
74b1de
+
74b1de
+[peersrx . %5Essh%3A]
74b1de
+remote_gsyncd = /nonexistent/gsyncd
74b1de
+
74b1de
+[peersrx .]
74b1de
+gluster_command_dir = /usr/local/sbin/
74b1de
+gluster_params = aux-gfid-mount acl
74b1de
+log_file = /var/log/glusterfs/geo-replication-slaves/${session_owner}:${local_node}${local_id}.${slavevol}.log
74b1de
+log_file_mbr = /var/log/glusterfs/geo-replication-slaves/mbr/${session_owner}:${local_node}${local_id}.${slavevol}.log
74b1de
+gluster_log_file = /var/log/glusterfs/geo-replication-slaves/${session_owner}:${local_node}${local_id}.${slavevol}.gluster.log
74b1de
+
74b1de
+[peers master slave]
74b1de
+session_owner = 0732cbd1-3ec5-4920-ab0d-aa5a896d5214
74b1de
+master.stime_xattr_name = trusted.glusterfs.0732cbd1-3ec5-4920-ab0d-aa5a896d5214.07a9005c-ace4-4f67-b3c0-73938fb236c4.stime
74b1de
+volume_id = 0732cbd1-3ec5-4920-ab0d-aa5a896d5214
74b1de
+use_tarssh = true
74b1de
+
74b1de
-- 
74b1de
1.8.3.1
74b1de