diff options
author | Martin Schwenke <martin@meltin.net> | 2013-05-06 15:36:29 +1000 |
---|---|---|
committer | Martin Schwenke <martin@meltin.net> | 2013-05-24 16:27:55 +1000 |
commit | f35e9bba9bd4b568e51d49e342bc99d3d5caeeb1 (patch) | |
tree | fd71c297d05a2a614b4dcb27cbcddeef52f82e08 /ctdb/tests/src | |
parent | 7f03618ae444432d5e9a2b4b8fad3fc8a3db82d5 (diff) | |
download | samba-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.c | 30 |
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. */ |