MCPcopy Create free account
hub / github.com/F-Stack/f-stack / clusterManagerCommandCreate

Function clusterManagerCommandCreate

app/redis-6.2.6/src/redis-cli.c:5610–5884  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5608/* Cluster Manager Commands */
5609
5610static int clusterManagerCommandCreate(int argc, char **argv) {
5611 int i, j, success = 1;
5612 cluster_manager.nodes = listCreate();
5613 for (i = 0; i < argc; i++) {
5614 char *addr = argv[i];
5615 char *c = strrchr(addr, '@');
5616 if (c != NULL) *c = '\0';
5617 c = strrchr(addr, ':');
5618 if (c == NULL) {
5619 fprintf(stderr, "Invalid address format: %s\n", addr);
5620 return 0;
5621 }
5622 *c = '\0';
5623 char *ip = addr;
5624 int port = atoi(++c);
5625 clusterManagerNode *node = clusterManagerNewNode(ip, port);
5626 if (!clusterManagerNodeConnect(node)) {
5627 freeClusterManagerNode(node);
5628 return 0;
5629 }
5630 char *err = NULL;
5631 if (!clusterManagerNodeIsCluster(node, &err)) {
5632 clusterManagerPrintNotClusterNodeError(node, err);
5633 if (err) zfree(err);
5634 freeClusterManagerNode(node);
5635 return 0;
5636 }
5637 err = NULL;
5638 if (!clusterManagerNodeLoadInfo(node, 0, &err)) {
5639 if (err) {
5640 CLUSTER_MANAGER_PRINT_REPLY_ERROR(node, err);
5641 zfree(err);
5642 }
5643 freeClusterManagerNode(node);
5644 return 0;
5645 }
5646 err = NULL;
5647 if (!clusterManagerNodeIsEmpty(node, &err)) {
5648 clusterManagerPrintNotEmptyNodeError(node, err);
5649 if (err) zfree(err);
5650 freeClusterManagerNode(node);
5651 return 0;
5652 }
5653 listAddNodeTail(cluster_manager.nodes, node);
5654 }
5655 int node_len = cluster_manager.nodes->len;
5656 int replicas = config.cluster_manager_command.replicas;
5657 int masters_count = CLUSTER_MANAGER_MASTERS_COUNT(node_len, replicas);
5658 if (masters_count < 3) {
5659 clusterManagerLogErr(
5660 "*** ERROR: Invalid configuration for cluster creation.\n"
5661 "*** Redis Cluster requires at least 3 master nodes.\n"
5662 "*** This is not possible with %d nodes and %d replicas per node.",
5663 node_len, replicas);
5664 clusterManagerLogErr("\n*** At least %d nodes are required.\n",
5665 3 * (replicas + 1));
5666 return 0;
5667 }

Callers

nothing calls this directly

Calls 15

listCreateFunction · 0.85
strrchrFunction · 0.85
clusterManagerNewNodeFunction · 0.85
freeClusterManagerNodeFunction · 0.85
listAddNodeTailFunction · 0.85
listRewindFunction · 0.85

Tested by

no test coverage detected