From 6e588913dd55f4b45bc7b60b46eed505c11b529c Mon Sep 17 00:00:00 2001 From: Amitay Isaacs Date: Fri, 8 Sep 2017 11:24:27 +1000 Subject: [PATCH] ctdb-recoverd: Abort recovery/takeover if recmaster changes Recovery and takeover are run via helper from recovery daemon. While the helpers are running, it's possible for the current node to lose election. If that happens, abort the currently running recovery/takeover helper. Signed-off-by: Amitay Isaacs Reviewed-by: Martin Schwenke --- ctdb/server/ctdb_recoverd.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ctdb/server/ctdb_recoverd.c b/ctdb/server/ctdb_recoverd.c index 9488bc2c842..2b94fed7478 100644 --- a/ctdb/server/ctdb_recoverd.c +++ b/ctdb/server/ctdb_recoverd.c @@ -1026,6 +1026,7 @@ static int helper_run(struct ctdb_recoverd *rec, TALLOC_CTX *mem_ctx, struct tevent_fd *fde; const char **args; int nargs, ret; + uint32_t recmaster = rec->recmaster; state = talloc_zero(mem_ctx, struct helper_state); if (state == NULL) { @@ -1085,6 +1086,14 @@ static int helper_run(struct ctdb_recoverd *rec, TALLOC_CTX *mem_ctx, while (!state->done) { tevent_loop_once(rec->ctdb->ev); + + /* If recmaster changes, we have lost election */ + if (recmaster != rec->recmaster) { + D_ERR("Recmaster changed to %u, aborting %s\n", + rec->recmaster, type); + state->result = 1; + break; + } } close(state->fd[0]); -- 2.34.1