MCPcopy Create free account
hub / github.com/Snapchat/KeyDB / clusterManagerCommandCreate

Function clusterManagerCommandCreate

src/redis-cli.c:4697–4971  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4695/* Cluster Manager Commands */
4696
4697static int clusterManagerCommandCreate(int argc, char **argv) {
4698 int i, j, success = 1;
4699 cluster_manager.nodes = listCreate();
4700 for (i = 0; i < argc; i++) {
4701 char *addr = argv[i];
4702 char *c = strrchr(addr, '@');
4703 if (c != NULL) *c = '\0';
4704 c = strrchr(addr, ':');
4705 if (c == NULL) {
4706 fprintf(stderr, "Invalid address format: %s\n", addr);
4707 return 0;
4708 }
4709 *c = '\0';
4710 char *ip = addr;
4711 int port = atoi(++c);
4712 clusterManagerNode *node = clusterManagerNewNode(ip, port);
4713 if (!clusterManagerNodeConnect(node)) {
4714 freeClusterManagerNode(node);
4715 return 0;
4716 }
4717 char *err = NULL;
4718 if (!clusterManagerNodeIsCluster(node, &err)) {
4719 clusterManagerPrintNotClusterNodeError(node, err);
4720 if (err) zfree(err);
4721 freeClusterManagerNode(node);
4722 return 0;
4723 }
4724 err = NULL;
4725 if (!clusterManagerNodeLoadInfo(node, 0, &err)) {
4726 if (err) {
4727 CLUSTER_MANAGER_PRINT_REPLY_ERROR(node, err);
4728 zfree(err);
4729 }
4730 freeClusterManagerNode(node);
4731 return 0;
4732 }
4733 err = NULL;
4734 if (!clusterManagerNodeIsEmpty(node, &err)) {
4735 clusterManagerPrintNotEmptyNodeError(node, err);
4736 if (err) zfree(err);
4737 freeClusterManagerNode(node);
4738 return 0;
4739 }
4740 listAddNodeTail(cluster_manager.nodes, node);
4741 }
4742 int node_len = cluster_manager.nodes->len;
4743 int replicas = config.cluster_manager_command.replicas;
4744 int masters_count = CLUSTER_MANAGER_MASTERS_COUNT(node_len, replicas);
4745 if (masters_count < 3) {
4746 clusterManagerLogErr(
4747 "*** ERROR: Invalid configuration for cluster creation.\n"
4748 "*** KeyDB Cluster requires at least 3 master nodes.\n"
4749 "*** This is not possible with %d nodes and %d replicas per node.",
4750 node_len, replicas);
4751 clusterManagerLogErr("\n*** At least %d nodes are required.\n",
4752 3 * (replicas + 1));
4753 return 0;
4754 }

Callers

nothing calls this directly

Calls 15

listCreateFunction · 0.85
clusterManagerNewNodeFunction · 0.85
freeClusterManagerNodeFunction · 0.85
zfreeFunction · 0.85
listAddNodeTailFunction · 0.85
zcallocFunction · 0.85

Tested by

no test coverage detected