diff options
-rw-r--r-- | ctdb/server/ctdb_takeover.c | 99 | ||||
-rw-r--r-- | ctdb/tests/src/ctdb_takeover_tests.c | 44 |
2 files changed, 71 insertions, 72 deletions
diff --git a/ctdb/server/ctdb_takeover.c b/ctdb/server/ctdb_takeover.c index 829800a8cab..5ca786d7c30 100644 --- a/ctdb/server/ctdb_takeover.c +++ b/ctdb/server/ctdb_takeover.c @@ -1228,8 +1228,8 @@ int ctdb_set_single_public_ip(struct ctdb_context *ctdb, return 0; } -struct ctdb_public_ip_list { - struct ctdb_public_ip_list *next; +struct public_ip_list { + struct public_ip_list *next; uint32_t pnn; ctdb_sock_addr addr; }; @@ -1237,9 +1237,8 @@ struct ctdb_public_ip_list { /* Given a physical node, return the number of public addresses that is currently assigned to this node. */ -static int node_ip_coverage(struct ctdb_context *ctdb, - int32_t pnn, - struct ctdb_public_ip_list *ips) +static int node_ip_coverage(struct ctdb_context *ctdb, int32_t pnn, + struct public_ip_list *ips) { int num=0; @@ -1255,9 +1254,9 @@ static int node_ip_coverage(struct ctdb_context *ctdb, /* Can the given node host the given IP: is the public IP known to the * node and is NOIPHOST unset? */ -static bool can_node_host_ip(struct ctdb_context *ctdb, int32_t pnn, +static bool can_node_host_ip(struct ctdb_context *ctdb, int32_t pnn, struct ctdb_ipflags ipflags, - struct ctdb_public_ip_list *ip) + struct public_ip_list *ip) { struct ctdb_all_public_ips *public_ips; int i; @@ -1282,9 +1281,9 @@ static bool can_node_host_ip(struct ctdb_context *ctdb, int32_t pnn, return false; } -static bool can_node_takeover_ip(struct ctdb_context *ctdb, int32_t pnn, +static bool can_node_takeover_ip(struct ctdb_context *ctdb, int32_t pnn, struct ctdb_ipflags ipflags, - struct ctdb_public_ip_list *ip) + struct public_ip_list *ip) { if (ipflags.noiptakeover) { return false; @@ -1297,10 +1296,10 @@ static bool can_node_takeover_ip(struct ctdb_context *ctdb, int32_t pnn, pick the node that currently are serving the least number of ips so that the ips get spread out evenly. */ -static int find_takeover_node(struct ctdb_context *ctdb, - struct ctdb_ipflags *ipflags, - struct ctdb_public_ip_list *ip, - struct ctdb_public_ip_list *all_ips) +static int find_takeover_node(struct ctdb_context *ctdb, + struct ctdb_ipflags *ipflags, + struct public_ip_list *ip, + struct public_ip_list *all_ips) { int pnn, min=0, num; int i, numnodes; @@ -1366,8 +1365,8 @@ static uint32_t *ip_key(ctdb_sock_addr *ip) static void *add_ip_callback(void *parm, void *data) { - struct ctdb_public_ip_list *this_ip = parm; - struct ctdb_public_ip_list *prev_ip = data; + struct public_ip_list *this_ip = parm; + struct public_ip_list *prev_ip = data; if (prev_ip == NULL) { return parm; @@ -1381,19 +1380,19 @@ static void *add_ip_callback(void *parm, void *data) static int getips_count_callback(void *param, void *data) { - struct ctdb_public_ip_list **ip_list = (struct ctdb_public_ip_list **)param; - struct ctdb_public_ip_list *new_ip = (struct ctdb_public_ip_list *)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 * +static struct public_ip_list * create_merged_ip_list(struct ctdb_context *ctdb) { int i, j; - struct ctdb_public_ip_list *ip_list; + struct public_ip_list *ip_list; struct ctdb_all_public_ips *public_ips; if (ctdb->ip_tree != NULL) { @@ -1415,9 +1414,9 @@ create_merged_ip_list(struct ctdb_context *ctdb) } for (j=0;j<public_ips->num;j++) { - struct ctdb_public_ip_list *tmp_ip; + struct public_ip_list *tmp_ip; - tmp_ip = talloc_zero(ctdb->ip_tree, struct ctdb_public_ip_list); + tmp_ip = talloc_zero(ctdb->ip_tree, struct public_ip_list); CTDB_NO_MEMORY_NULL(ctdb, tmp_ip); /* Do not use information about IP addresses hosted * on other nodes, it may not be accurate */ @@ -1486,10 +1485,10 @@ static uint32_t ip_distance(ctdb_sock_addr *ip1, ctdb_sock_addr *ip2) used in the main part of the algorithm. */ static uint32_t ip_distance_2_sum(ctdb_sock_addr *ip, - struct ctdb_public_ip_list *ips, + struct public_ip_list *ips, int pnn) { - struct ctdb_public_ip_list *t; + struct public_ip_list *t; uint32_t d; uint32_t sum = 0; @@ -1522,9 +1521,9 @@ static uint32_t ip_distance_2_sum(ctdb_sock_addr *ip, /* Return the LCP2 imbalance metric for addresses currently assigned to the given node. */ -static uint32_t lcp2_imbalance(struct ctdb_public_ip_list * all_ips, int pnn) +static uint32_t lcp2_imbalance(struct public_ip_list * all_ips, int pnn) { - struct ctdb_public_ip_list *t; + struct public_ip_list *t; uint32_t imbalance = 0; @@ -1546,9 +1545,9 @@ static uint32_t lcp2_imbalance(struct ctdb_public_ip_list * all_ips, int pnn) */ static void basic_allocate_unassigned(struct ctdb_context *ctdb, struct ctdb_ipflags *ipflags, - struct ctdb_public_ip_list *all_ips) + struct public_ip_list *all_ips) { - struct ctdb_public_ip_list *tmp_ip; + struct public_ip_list *tmp_ip; /* loop over all ip's and find a physical node to cover for each unassigned ip. @@ -1567,12 +1566,12 @@ static void basic_allocate_unassigned(struct ctdb_context *ctdb, */ static void basic_failback(struct ctdb_context *ctdb, struct ctdb_ipflags *ipflags, - struct ctdb_public_ip_list *all_ips, + struct public_ip_list *all_ips, int num_ips) { int i, numnodes; int maxnode, maxnum, minnode, minnum, num, retries; - struct ctdb_public_ip_list *tmp_ip; + struct public_ip_list *tmp_ip; numnodes = talloc_array_length(ipflags); retries = 0; @@ -1638,7 +1637,7 @@ try_again: */ if ( (maxnum > minnum+1) && (retries < (num_ips + 5)) ){ - struct ctdb_public_ip_list *tmp; + struct public_ip_list *tmp; /* Reassign one of maxnode's VNNs */ for (tmp=all_ips;tmp;tmp=tmp->next) { @@ -1654,13 +1653,13 @@ try_again: static void lcp2_init(struct ctdb_context *tmp_ctx, struct ctdb_ipflags *ipflags, - struct ctdb_public_ip_list *all_ips, + struct public_ip_list *all_ips, uint32_t *force_rebalance_nodes, uint32_t **lcp2_imbalances, bool **rebalance_candidates) { int i, numnodes; - struct ctdb_public_ip_list *tmp_ip; + struct public_ip_list *tmp_ip; numnodes = talloc_array_length(ipflags); @@ -1712,15 +1711,15 @@ static void lcp2_init(struct ctdb_context *tmp_ctx, */ static void lcp2_allocate_unassigned(struct ctdb_context *ctdb, struct ctdb_ipflags *ipflags, - struct ctdb_public_ip_list *all_ips, + struct public_ip_list *all_ips, uint32_t *lcp2_imbalances) { - struct ctdb_public_ip_list *tmp_ip; + struct public_ip_list *tmp_ip; int dstnode, numnodes; int minnode; uint32_t mindsum, dstdsum, dstimbl, minimbl; - struct ctdb_public_ip_list *minip; + struct public_ip_list *minip; bool should_loop = true; bool have_unassigned = true; @@ -1810,7 +1809,7 @@ static void lcp2_allocate_unassigned(struct ctdb_context *ctdb, */ static bool lcp2_failback_candidate(struct ctdb_context *ctdb, struct ctdb_ipflags *ipflags, - struct ctdb_public_ip_list *all_ips, + struct public_ip_list *all_ips, int srcnode, uint32_t *lcp2_imbalances, bool *rebalance_candidates) @@ -1818,8 +1817,8 @@ static bool lcp2_failback_candidate(struct ctdb_context *ctdb, int dstnode, mindstnode, numnodes; uint32_t srcimbl, srcdsum, dstimbl, dstdsum; uint32_t minsrcimbl, mindstimbl; - struct ctdb_public_ip_list *minip; - struct ctdb_public_ip_list *tmp_ip; + struct public_ip_list *minip; + struct public_ip_list *tmp_ip; /* Find an IP and destination node that best reduces imbalance. */ srcimbl = 0; @@ -1927,7 +1926,7 @@ static int lcp2_cmp_imbalance_pnn(const void * a, const void * b) */ static void lcp2_failback(struct ctdb_context *ctdb, struct ctdb_ipflags *ipflags, - struct ctdb_public_ip_list *all_ips, + struct public_ip_list *all_ips, uint32_t *lcp2_imbalances, bool *rebalance_candidates) { @@ -1981,9 +1980,9 @@ try_again: static void unassign_unsuitable_ips(struct ctdb_context *ctdb, struct ctdb_ipflags *ipflags, - struct ctdb_public_ip_list *all_ips) + struct public_ip_list *all_ips) { - struct ctdb_public_ip_list *tmp_ip; + struct public_ip_list *tmp_ip; /* verify that the assigned nodes can serve that public ip and set it to -1 if not @@ -2005,9 +2004,9 @@ static void unassign_unsuitable_ips(struct ctdb_context *ctdb, static void ip_alloc_deterministic_ips(struct ctdb_context *ctdb, struct ctdb_ipflags *ipflags, - struct ctdb_public_ip_list *all_ips) + struct public_ip_list *all_ips) { - struct ctdb_public_ip_list *tmp_ip; + struct public_ip_list *tmp_ip; int i, numnodes; numnodes = talloc_array_length(ipflags); @@ -2039,10 +2038,10 @@ static void ip_alloc_deterministic_ips(struct ctdb_context *ctdb, static void ip_alloc_nondeterministic_ips(struct ctdb_context *ctdb, struct ctdb_ipflags *ipflags, - struct ctdb_public_ip_list *all_ips) + struct public_ip_list *all_ips) { /* This should be pushed down into basic_failback. */ - struct ctdb_public_ip_list *tmp_ip; + struct public_ip_list *tmp_ip; int num_ips = 0; for (tmp_ip=all_ips;tmp_ip;tmp_ip=tmp_ip->next) { num_ips++; @@ -2065,7 +2064,7 @@ static void ip_alloc_nondeterministic_ips(struct ctdb_context *ctdb, static void ip_alloc_lcp2(struct ctdb_context *ctdb, struct ctdb_ipflags *ipflags, - struct ctdb_public_ip_list *all_ips, + struct public_ip_list *all_ips, uint32_t *force_rebalance_nodes) { uint32_t *lcp2_imbalances; @@ -2128,7 +2127,7 @@ static bool all_nodes_are_disabled(struct ctdb_node_map_old *nodemap) /* The calculation part of the IP allocation algorithm. */ static void ctdb_takeover_run_core(struct ctdb_context *ctdb, struct ctdb_ipflags *ipflags, - struct ctdb_public_ip_list **all_ips_p, + struct public_ip_list **all_ips_p, uint32_t *force_rebalance_nodes) { /* since nodes only know about those public addresses that @@ -2579,7 +2578,7 @@ int ctdb_takeover_run(struct ctdb_context *ctdb, struct ctdb_node_map_old *nodem int i, j, ret; struct ctdb_public_ip ip; uint32_t *nodes; - struct ctdb_public_ip_list *all_ips, *tmp_ip; + struct public_ip_list *all_ips, *tmp_ip; TDB_DATA data; struct timeval timeout; struct client_async_data *async_data; @@ -4229,7 +4228,7 @@ int verify_remote_ip_allocation(struct ctdb_context *ctdb, struct ctdb_all_public_ips *ips, uint32_t pnn) { - struct ctdb_public_ip_list *tmp_ip; + struct public_ip_list *tmp_ip; int i; if (ctdb->ip_tree == NULL) { @@ -4268,7 +4267,7 @@ int verify_remote_ip_allocation(struct ctdb_context *ctdb, int update_ip_assignment_tree(struct ctdb_context *ctdb, struct ctdb_public_ip *ip) { - struct ctdb_public_ip_list *tmp_ip; + struct public_ip_list *tmp_ip; /* IP tree is never built if DisableIPFailover is set */ if (ctdb->tunable.disable_ip_failover != 0) { diff --git a/ctdb/tests/src/ctdb_takeover_tests.c b/ctdb/tests/src/ctdb_takeover_tests.c index 7fc7dec1994..dbc25a63258 100644 --- a/ctdb/tests/src/ctdb_takeover_tests.c +++ b/ctdb/tests/src/ctdb_takeover_tests.c @@ -26,16 +26,16 @@ /* Format of each line is "IP pnn" - the separator has to be at least * 1 space (not a tab or whatever - a space!). */ -static struct ctdb_public_ip_list * +static struct public_ip_list * read_ctdb_public_ip_list(TALLOC_CTX *ctx) { char line[1024]; ctdb_sock_addr addr; char *t; int pnn; - struct ctdb_public_ip_list *last = NULL; + struct public_ip_list *last = NULL; - struct ctdb_public_ip_list *ret = NULL; + struct public_ip_list *ret = NULL; while (fgets(line, sizeof(line), stdin) != NULL) { @@ -55,9 +55,9 @@ read_ctdb_public_ip_list(TALLOC_CTX *ctx) if (parse_ip(line, NULL, 0, &addr)) { if (last == NULL) { - last = talloc(ctx, struct ctdb_public_ip_list); + last = talloc(ctx, struct public_ip_list); } else { - last->next = talloc(ctx, struct ctdb_public_ip_list); + last->next = talloc(ctx, struct public_ip_list); last = last->next; } last->next = NULL; @@ -74,7 +74,7 @@ read_ctdb_public_ip_list(TALLOC_CTX *ctx) return ret; } -static void print_ctdb_public_ip_list(struct ctdb_public_ip_list * ips) +static void print_ctdb_public_ip_list(struct public_ip_list * ips) { while (ips) { printf("%s %d\n", ctdb_addr_to_str(&(ips->addr)), ips->pnn); @@ -86,7 +86,7 @@ static void print_ctdb_public_ip_list(struct ctdb_public_ip_list * ips) * them back out. */ static void ctdb_test_read_ctdb_public_ip_list(void) { - struct ctdb_public_ip_list *l; + struct public_ip_list *l; TALLOC_CTX *tmp_ctx = talloc_new(NULL); @@ -102,17 +102,17 @@ static void ctdb_test_read_ctdb_public_ip_list(void) static bool read_ctdb_public_ip_info(TALLOC_CTX *ctx, int numnodes, - struct ctdb_public_ip_list ** all_ips, + struct public_ip_list ** all_ips, struct ctdb_all_public_ips *** avail) { char line[1024]; ctdb_sock_addr addr; char *t, *tok; - struct ctdb_public_ip_list * ta; + struct public_ip_list * ta; int pnn, numips, curr, n, i; struct ctdb_all_public_ips * a; - struct ctdb_public_ip_list *last = NULL; + struct public_ip_list *last = NULL; *avail = talloc_array_size(ctx, sizeof(struct ctdb_all_public_ips *), CTDB_TEST_MAX_NODES); memset(*avail, 0, @@ -159,9 +159,9 @@ read_ctdb_public_ip_info(TALLOC_CTX *ctx, /* Add address + pnn to all_ips */ if (last == NULL) { - last = talloc(ctx, struct ctdb_public_ip_list); + last = talloc(ctx, struct public_ip_list); } else { - last->next = talloc(ctx, struct ctdb_public_ip_list); + last->next = talloc(ctx, struct public_ip_list); last = last->next; } last->next = NULL; @@ -233,7 +233,7 @@ static void print_ctdb_available_ips(int numnodes, static void ctdb_test_read_ctdb_public_ip_info(const char nodestates[]) { int numnodes; - struct ctdb_public_ip_list *l; + struct public_ip_list *l; struct ctdb_all_public_ips **avail; char *tok, *ns; @@ -264,7 +264,7 @@ static void ctdb_test_read_ctdb_public_ip_info(const char nodestates[]) /* Read 2 IPs from stdin, calculate the IP distance and print it. */ static void ctdb_test_ip_distance(void) { - struct ctdb_public_ip_list *l; + struct public_ip_list *l; uint32_t distance; TALLOC_CTX *tmp_ctx = talloc_new(NULL); @@ -284,8 +284,8 @@ static void ctdb_test_ip_distance(void) * the given node. The given IP must one of the ones in the list. */ static void ctdb_test_ip_distance_2_sum(const char ip[], int pnn) { - struct ctdb_public_ip_list *l; - struct ctdb_public_ip_list *t; + struct public_ip_list *l; + struct public_ip_list *t; ctdb_sock_addr addr; uint32_t distance; @@ -321,7 +321,7 @@ static void ctdb_test_ip_distance_2_sum(const char ip[], int pnn) * IP distances between the first and the rest, and print it. */ static void ctdb_test_lcp2_imbalance(int pnn) { - struct ctdb_public_ip_list *l; + struct public_ip_list *l; uint32_t imbalance; TALLOC_CTX *tmp_ctx = talloc_new(NULL); @@ -408,7 +408,7 @@ static enum ctdb_runstate *get_runstate(TALLOC_CTX *tmp_ctx, */ static void ctdb_test_init(const char nodestates[], struct ctdb_context **ctdb, - struct ctdb_public_ip_list **all_ips, + struct public_ip_list **all_ips, struct ctdb_ipflags **ipflags, bool read_ips_for_multiple_nodes) { @@ -505,7 +505,7 @@ static void ctdb_test_init(const char nodestates[], static void ctdb_test_lcp2_allocate_unassigned(const char nodestates[]) { struct ctdb_context *ctdb; - struct ctdb_public_ip_list *all_ips; + struct public_ip_list *all_ips; struct ctdb_ipflags *ipflags; uint32_t *lcp2_imbalances; @@ -528,7 +528,7 @@ static void ctdb_test_lcp2_allocate_unassigned(const char nodestates[]) static void ctdb_test_lcp2_failback(const char nodestates[]) { struct ctdb_context *ctdb; - struct ctdb_public_ip_list *all_ips; + struct public_ip_list *all_ips; struct ctdb_ipflags *ipflags; uint32_t *lcp2_imbalances; @@ -551,7 +551,7 @@ static void ctdb_test_lcp2_failback(const char nodestates[]) static void ctdb_test_lcp2_failback_loop(const char nodestates[]) { struct ctdb_context *ctdb; - struct ctdb_public_ip_list *all_ips; + struct public_ip_list *all_ips; struct ctdb_ipflags *ipflags; uint32_t *lcp2_imbalances; @@ -577,7 +577,7 @@ static void ctdb_test_ctdb_takeover_run_core(const char nodestates[], bool read_ips_for_multiple_nodes) { struct ctdb_context *ctdb; - struct ctdb_public_ip_list *all_ips; + struct public_ip_list *all_ips; struct ctdb_ipflags *ipflags; ctdb_test_init(nodestates, &ctdb, &all_ips, &ipflags, |