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