summaryrefslogtreecommitdiff
path: root/ctdb/server/ctdb_takeover.c
diff options
context:
space:
mode:
Diffstat (limited to 'ctdb/server/ctdb_takeover.c')
-rw-r--r--ctdb/server/ctdb_takeover.c99
1 files changed, 5 insertions, 94 deletions
diff --git a/ctdb/server/ctdb_takeover.c b/ctdb/server/ctdb_takeover.c
index b40bbadbf56..c45b218cc38 100644
--- a/ctdb/server/ctdb_takeover.c
+++ b/ctdb/server/ctdb_takeover.c
@@ -1129,31 +1129,6 @@ int ctdb_set_public_addresses(struct ctdb_context *ctdb, bool check_addresses)
return 0;
}
-static void *add_ip_callback(void *parm, void *data)
-{
- struct public_ip_list *this_ip = parm;
- struct public_ip_list *prev_ip = data;
-
- if (prev_ip == NULL) {
- return parm;
- }
- if (this_ip->pnn == -1) {
- this_ip->pnn = prev_ip->pnn;
- }
-
- return parm;
-}
-
-static int getips_count_callback(void *param, void *data)
-{
- struct public_ip_list **ip_list = (struct public_ip_list **)param;
- struct public_ip_list *new_ip = (struct public_ip_list *)data;
-
- new_ip->next = *ip_list;
- *ip_list = new_ip;
- return 0;
-}
-
static struct ctdb_public_ip_list *
ctdb_fetch_remote_public_ips(struct ctdb_context *ctdb,
TALLOC_CTX *mem_ctx,
@@ -1210,61 +1185,6 @@ ctdb_fetch_remote_public_ips(struct ctdb_context *ctdb,
return public_ips;
}
-static struct public_ip_list *
-create_merged_ip_list(struct ipalloc_state *ipalloc_state)
-{
- int i, j;
- struct public_ip_list *ip_list;
- struct ctdb_public_ip_list *public_ips;
- struct trbt_tree *ip_tree;
-
- ip_tree = trbt_create(ipalloc_state, 0);
-
- if (ipalloc_state->known_public_ips == NULL) {
- DEBUG(DEBUG_ERR, ("Known public IPs not set\n"));
- return NULL;
- }
-
- for (i=0; i < ipalloc_state->num; i++) {
-
- public_ips = &ipalloc_state->known_public_ips[i];
-
- for (j=0; j < public_ips->num; j++) {
- struct public_ip_list *tmp_ip;
-
- /* This is returned as part of ip_list */
- tmp_ip = talloc_zero(ipalloc_state, struct public_ip_list);
- if (tmp_ip == NULL) {
- DEBUG(DEBUG_ERR,
- (__location__ " out of memory\n"));
- talloc_free(ip_tree);
- return NULL;
- }
-
- /* Do not use information about IP addresses hosted
- * on other nodes, it may not be accurate */
- if (public_ips->ip[j].pnn == i) {
- tmp_ip->pnn = public_ips->ip[j].pnn;
- } else {
- tmp_ip->pnn = -1;
- }
- tmp_ip->addr = public_ips->ip[j].addr;
- tmp_ip->next = NULL;
-
- trbt_insertarray32_callback(ip_tree,
- IP_KEYLEN, ip_key(&public_ips->ip[j].addr),
- add_ip_callback,
- tmp_ip);
- }
- }
-
- ip_list = NULL;
- trbt_traversearray32(ip_tree, IP_KEYLEN, getips_count_callback, &ip_list);
- talloc_free(ip_tree);
-
- return ip_list;
-}
-
static bool all_nodes_are_disabled(struct ctdb_node_map_old *nodemap)
{
int i;
@@ -1624,7 +1544,6 @@ static void takeover_run_process_failures(struct ctdb_context *ctdb,
* - Use ipalloc_set_public_ips() to set known and available IP
addresses for allocation
* - If no available IP addresses then early exit
- * - Build list of (known IPs, currently assigned node)
* - Populate list of nodes to force rebalance - internal structure,
* currently no way to fetch, only used by LCP2 for nodes that have
* had new IP addresses added
@@ -1717,23 +1636,15 @@ int ctdb_takeover_run(struct ctdb_context *ctdb, struct ctdb_node_map_old *nodem
goto ipreallocated;
}
- /* since nodes only know about those public addresses that
- can be served by that particular node, no single node has
- a full list of all public addresses that exist in the cluster.
- Walk over all node structures and create a merged list of
- all public addresses that exist in the cluster.
- */
- all_ips = create_merged_ip_list(ipalloc_state);
- if (all_ips == NULL) {
- talloc_free(tmp_ctx);
- return -1;
- }
- ipalloc_state->all_ips = all_ips;
-
ipalloc_state->force_rebalance_nodes = force_rebalance_nodes;
/* Do the IP reassignment calculations */
ipalloc(ipalloc_state);
+ if (ipalloc_state->all_ips == NULL) {
+ talloc_free(tmp_ctx);
+ return -1;
+ }
+ all_ips = ipalloc_state->all_ips;
/* Now tell all nodes to release any public IPs should not
* host. This will be a NOOP on nodes that don't currently