do not handle --cluster-yes for cluster fix mode

This commit is contained in:
Benjamin Sergeant 2020-05-14 15:29:06 -07:00 committed by antirez
parent 57b4fb0d84
commit e8b09d2203

View File

@ -1797,8 +1797,11 @@ static void usage(void) {
exit(1); exit(1);
} }
static int confirmWithYes(char *msg) { static int confirmWithYes(char *msg, int force) {
if (config.cluster_manager_command.flags & CLUSTER_MANAGER_CMD_FLAG_YES) { /* if force is true and --cluster-yes option is on,
* do not prompt for an answer */
if (force &&
(config.cluster_manager_command.flags & CLUSTER_MANAGER_CMD_FLAG_YES)) {
return 1; return 1;
} }
@ -4476,12 +4479,16 @@ static int clusterManagerFixSlotsCoverage(char *all_slots) {
} }
dictReleaseIterator(iter); dictReleaseIterator(iter);
/* we want explicit manual confirmation from users for all the fix cases */
int force = 0;
/* Handle case "1": keys in no node. */ /* Handle case "1": keys in no node. */
if (listLength(none) > 0) { if (listLength(none) > 0) {
printf("The following uncovered slots have no keys " printf("The following uncovered slots have no keys "
"across the cluster:\n"); "across the cluster:\n");
clusterManagerPrintSlotsList(none); clusterManagerPrintSlotsList(none);
if (confirmWithYes("Fix these slots by covering with a random node?")){ if (confirmWithYes("Fix these slots by covering with a random node?",
force)) {
listIter li; listIter li;
listNode *ln; listNode *ln;
listRewind(none, &li); listRewind(none, &li);
@ -4507,7 +4514,8 @@ static int clusterManagerFixSlotsCoverage(char *all_slots) {
if (listLength(single) > 0) { if (listLength(single) > 0) {
printf("The following uncovered slots have keys in just one node:\n"); printf("The following uncovered slots have keys in just one node:\n");
clusterManagerPrintSlotsList(single); clusterManagerPrintSlotsList(single);
if (confirmWithYes("Fix these slots by covering with those nodes?")){ if (confirmWithYes("Fix these slots by covering with those nodes?",
force)) {
listIter li; listIter li;
listNode *ln; listNode *ln;
listRewind(single, &li); listRewind(single, &li);
@ -4539,7 +4547,7 @@ static int clusterManagerFixSlotsCoverage(char *all_slots) {
printf("The following uncovered slots have keys in multiple nodes:\n"); printf("The following uncovered slots have keys in multiple nodes:\n");
clusterManagerPrintSlotsList(multi); clusterManagerPrintSlotsList(multi);
if (confirmWithYes("Fix these slots by moving keys " if (confirmWithYes("Fix these slots by moving keys "
"into a single node?")) { "into a single node?", force)) {
listIter li; listIter li;
listNode *ln; listNode *ln;
listRewind(multi, &li); listRewind(multi, &li);
@ -5502,7 +5510,8 @@ assign_replicas:
} }
clusterManagerOptimizeAntiAffinity(ip_nodes, ip_count); clusterManagerOptimizeAntiAffinity(ip_nodes, ip_count);
clusterManagerShowNodes(); clusterManagerShowNodes();
if (confirmWithYes("Can I set the above configuration?")) { int force = 1;
if (confirmWithYes("Can I set the above configuration?", force)) {
listRewind(cluster_manager.nodes, &li); listRewind(cluster_manager.nodes, &li);
while ((ln = listNext(&li)) != NULL) { while ((ln = listNext(&li)) != NULL) {
clusterManagerNode *node = ln->value; clusterManagerNode *node = ln->value;