diff options
-rw-r--r-- | cli/src/cli-cmd-parser.c | 36 | ||||
-rw-r--r-- | cli/src/cli-cmd-volume.c | 2 | ||||
-rw-r--r-- | cli/src/cli.h | 4 | ||||
-rw-r--r-- | geo-replication/syncdaemon/gsyncd.py | 2 | ||||
-rw-r--r-- | geo-replication/syncdaemon/master.py | 6 | ||||
-rw-r--r-- | tests/00-geo-rep/bug-1708603.t | 63 |
6 files changed, 102 insertions, 11 deletions
diff --git a/cli/src/cli-cmd-parser.c b/cli/src/cli-cmd-parser.c index 4d65d4de871..aeac4c7c697 100644 --- a/cli/src/cli-cmd-parser.c +++ b/cli/src/cli-cmd-parser.c @@ -2861,8 +2861,8 @@ out: } int32_t -cli_cmd_gsync_set_parse(const char **words, int wordcount, dict_t **options, - char **errstr) +cli_cmd_gsync_set_parse(struct cli_state *state, const char **words, + int wordcount, dict_t **options, char **errstr) { int32_t ret = -1; dict_t *dict = NULL; @@ -2880,6 +2880,8 @@ cli_cmd_gsync_set_parse(const char **words, int wordcount, dict_t **options, char *save_ptr = NULL; char *slave_temp = NULL; char *token = NULL; + gf_answer_t answer = GF_ANSWER_NO; + const char *question = NULL; GF_ASSERT(words); GF_ASSERT(options); @@ -3066,16 +3068,36 @@ cli_cmd_gsync_set_parse(const char **words, int wordcount, dict_t **options, } if (!ret) ret = dict_set_int32(dict, "type", type); - if (!ret && type == GF_GSYNC_OPTION_TYPE_CONFIG) + if (!ret && type == GF_GSYNC_OPTION_TYPE_CONFIG) { + if (!strcmp((char *)words[wordcount - 2], "ignore-deletes") && + !strcmp((char *)words[wordcount - 1], "true")) { + question = + "There exists ~15 seconds delay for the option to take" + " effect from stime of the corresponding brick. Please" + " check the log for the time, the option is effective." + " Proceed"; + + answer = cli_cmd_get_confirmation(state, question); + + if (GF_ANSWER_NO == answer) { + gf_log("cli", GF_LOG_INFO, + "Operation " + "cancelled, exiting"); + *errstr = gf_strdup("Aborted by user."); + ret = -1; + goto out; + } + } + ret = config_parse(words, wordcount, dict, cmdi, glob); + } out: if (slave_temp) GF_FREE(slave_temp); - if (ret) { - if (dict) - dict_unref(dict); - } else + if (ret && dict) + dict_unref(dict); + else *options = dict; return ret; diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c index 404f71752d3..e6144932144 100644 --- a/cli/src/cli-cmd-volume.c +++ b/cli/src/cli-cmd-volume.c @@ -2174,7 +2174,7 @@ cli_cmd_volume_gsync_set_cbk(struct cli_state *state, struct cli_cmd_word *word, proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GSYNC_SET]; - ret = cli_cmd_gsync_set_parse(words, wordcount, &options, &errstr); + ret = cli_cmd_gsync_set_parse(state, words, wordcount, &options, &errstr); if (ret) { if (errstr) { cli_err("%s", errstr); diff --git a/cli/src/cli.h b/cli/src/cli.h index 197e027e166..81f75a0b416 100644 --- a/cli/src/cli.h +++ b/cli/src/cli.h @@ -267,8 +267,8 @@ int32_t cli_cmd_volume_reset_parse(const char **words, int wordcount, dict_t **opt); int32_t -cli_cmd_gsync_set_parse(const char **words, int wordcount, dict_t **opt, - char **errstr); +cli_cmd_gsync_set_parse(struct cli_state *state, const char **words, + int wordcount, dict_t **opt, char **errstr); int32_t cli_cmd_quota_parse(const char **words, int wordcount, dict_t **opt); diff --git a/geo-replication/syncdaemon/gsyncd.py b/geo-replication/syncdaemon/gsyncd.py index 95b26c5f3fb..73a91fea0f8 100644 --- a/geo-replication/syncdaemon/gsyncd.py +++ b/geo-replication/syncdaemon/gsyncd.py @@ -300,7 +300,7 @@ def main(): # Log message for loaded config file if config_file is not None: - logging.info(lf("Using session config file", path=config_file)) + logging.debug(lf("Using session config file", path=config_file)) set_term_handler() excont = FreeObject(exval=0) diff --git a/geo-replication/syncdaemon/master.py b/geo-replication/syncdaemon/master.py index 96232bb0831..62640d4eaee 100644 --- a/geo-replication/syncdaemon/master.py +++ b/geo-replication/syncdaemon/master.py @@ -1546,6 +1546,12 @@ class GMasterChangeloghistoryMixin(GMasterChangelogMixin): data_stime = self.get_data_stime() end_time = int(time.time()) + + #as start of historical crawl marks Geo-rep worker restart + if gconf.get("ignore-deletes"): + logging.info(lf('ignore-deletes config option is set', + stime=data_stime)) + logging.info(lf('starting history crawl', turns=self.history_turns, stime=data_stime, diff --git a/tests/00-geo-rep/bug-1708603.t b/tests/00-geo-rep/bug-1708603.t new file mode 100644 index 00000000000..26913f1d318 --- /dev/null +++ b/tests/00-geo-rep/bug-1708603.t @@ -0,0 +1,63 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc +. $(dirname $0)/../volume.rc +. $(dirname $0)/../geo-rep.rc +. $(dirname $0)/../env.rc + +SCRIPT_TIMEOUT=300 + +##Cleanup and start glusterd +cleanup; +TEST glusterd; +TEST pidof glusterd + + +##Variables +GEOREP_CLI="gluster 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 + +##Mount master +TEST glusterfs -s $H0 --volfile-id $GMV0 $M0 + +##Mount slave +TEST glusterfs -s $H0 --volfile-id $GSV0 $M1 + +#Create geo-rep session +TEST create_georep_session $master $slave + +echo n | $GEOREP_CLI $master $slave config ignore-deletes true >/dev/null 2>&1 +EXPECT "false" echo $($GEOREP_CLI $master $slave config ignore-deletes) +echo y | $GEOREP_CLI $master $slave config ignore-deletes true +EXPECT "true" echo $($GEOREP_CLI $master $slave config ignore-deletes) + +#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 |