summaryrefslogtreecommitdiff
path: root/ctdb/tests/src
diff options
context:
space:
mode:
authorMartin Schwenke <martin@meltin.net>2013-05-06 15:36:29 +1000
committerMartin Schwenke <martin@meltin.net>2013-05-24 16:27:55 +1000
commitf35e9bba9bd4b568e51d49e342bc99d3d5caeeb1 (patch)
treefd71c297d05a2a614b4dcb27cbcddeef52f82e08 /ctdb/tests/src
parent7f03618ae444432d5e9a2b4b8fad3fc8a3db82d5 (diff)
downloadsamba-f35e9bba9bd4b568e51d49e342bc99d3d5caeeb1.tar.gz
recoverd: Nodes can only takeover IPs if they are in runstate RUNNING
Currently the order of the first IP allocation, including the first "ipreallocated" event, and the "startup" event is undefined. Both of these events can (re)start services. This stops IPs being hosted before the "startup" event has completed. Signed-off-by: Martin Schwenke <martin@meltin.net> Pair-programmed-with: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit f15dd562fd8c08cafd957ce9509102db7eb49668)
Diffstat (limited to 'ctdb/tests/src')
-rw-r--r--ctdb/tests/src/ctdb_takeover_tests.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/ctdb/tests/src/ctdb_takeover_tests.c b/ctdb/tests/src/ctdb_takeover_tests.c
index e804c9a293d..196f90dd4b2 100644
--- a/ctdb/tests/src/ctdb_takeover_tests.c
+++ b/ctdb/tests/src/ctdb_takeover_tests.c
@@ -353,6 +353,30 @@ static uint32_t *get_tunable_values(TALLOC_CTX *tmp_ctx,
return tvals;
}
+static enum ctdb_runstate *get_runstate(TALLOC_CTX *tmp_ctx,
+ int numnodes)
+{
+ int i;
+ uint32_t *tvals;
+ enum ctdb_runstate *runstate =
+ talloc_zero_array(tmp_ctx, enum ctdb_runstate, numnodes);
+ char *t = getenv("CTDB_TEST_RUNSTATE");
+
+ if (t == NULL) {
+ for (i=0; i<numnodes; i++) {
+ runstate[i] = CTDB_RUNSTATE_RUNNING;
+ }
+ } else {
+ tvals = get_tunable_values(tmp_ctx, numnodes, "CTDB_TEST_RUNSTATE");
+ for (i=0; i<numnodes; i++) {
+ runstate[i] = (enum ctdb_runstate) tvals[i];
+ }
+ talloc_free(tvals);
+ }
+
+ return runstate;
+}
+
void ctdb_test_init(const char nodestates[],
struct ctdb_context **ctdb,
struct ctdb_public_ip_list **all_ips,
@@ -365,6 +389,7 @@ void ctdb_test_init(const char nodestates[],
struct ctdb_node_map *nodemap;
uint32_t *tval_noiptakeover;
uint32_t *tval_noiptakeoverondisabled;
+ enum ctdb_runstate *runstate;
*ctdb = talloc_zero(NULL, struct ctdb_context);
@@ -408,6 +433,8 @@ void ctdb_test_init(const char nodestates[],
get_tunable_values(*ctdb, numnodes,
"CTDB_SET_NoIPHostOnAllDisabled");
+ runstate = get_runstate(*ctdb, numnodes);
+
nodemap = talloc_array(*ctdb, struct ctdb_node_map, numnodes);
nodemap->num = numnodes;
@@ -429,7 +456,8 @@ void ctdb_test_init(const char nodestates[],
*ipflags = set_ipflags_internal(*ctdb, *ctdb, nodemap,
tval_noiptakeover,
- tval_noiptakeoverondisabled);
+ tval_noiptakeoverondisabled,
+ runstate);
}
/* IP layout is read from stdin. */