diff --git a/src/redis-cli.c b/src/redis-cli.c index 4b0f4d2d5..96eb3c3dd 100644 --- a/src/redis-cli.c +++ b/src/redis-cli.c @@ -1797,11 +1797,14 @@ static void usage(void) { exit(1); } -static int confirmWithYes(char *msg) { - if (config.cluster_manager_command.flags & CLUSTER_MANAGER_CMD_FLAG_YES) { +static int confirmWithYes(char *msg, int force) { + /* 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; } - + printf("%s (type 'yes' to accept): ", msg); fflush(stdout); char buf[4]; @@ -4476,12 +4479,16 @@ static int clusterManagerFixSlotsCoverage(char *all_slots) { } dictReleaseIterator(iter); + /* we want explicit manual confirmation from users for all the fix cases */ + int force = 0; + /* Handle case "1": keys in no node. */ if (listLength(none) > 0) { printf("The following uncovered slots have no keys " "across the cluster:\n"); 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; listNode *ln; listRewind(none, &li); @@ -4507,7 +4514,8 @@ static int clusterManagerFixSlotsCoverage(char *all_slots) { if (listLength(single) > 0) { printf("The following uncovered slots have keys in just one node:\n"); 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; listNode *ln; listRewind(single, &li); @@ -4539,7 +4547,7 @@ static int clusterManagerFixSlotsCoverage(char *all_slots) { printf("The following uncovered slots have keys in multiple nodes:\n"); clusterManagerPrintSlotsList(multi); if (confirmWithYes("Fix these slots by moving keys " - "into a single node?")) { + "into a single node?", force)) { listIter li; listNode *ln; listRewind(multi, &li); @@ -5502,7 +5510,8 @@ assign_replicas: } clusterManagerOptimizeAntiAffinity(ip_nodes, ip_count); 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); while ((ln = listNext(&li)) != NULL) { clusterManagerNode *node = ln->value;