The branch, master has been updated via ccd67cf7f26713e695000d89d9ce8cfa78bfe00f (commit) from c19cb751077b78cf4b6e28a1e3746d4ffedbfd68 (commit)
http://gitweb.samba.org/?p=ctdb.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit ccd67cf7f26713e695000d89d9ce8cfa78bfe00f Author: Stefan Metzmacher <me...@samba.org> Date: Tue Jun 21 15:49:30 2011 +0200 recoverd: try to become the recovery master if we have the capability, but the current master doesn't metze (cherry picked from commit 6ba8af28f8a8f79db65120a97d7157dcc5c7e083) Signed-off-by: Michael Adam <ob...@samba.org> ----------------------------------------------------------------------- Summary of changes: server/ctdb_recoverd.c | 23 ++++++++++++++++++++++- 1 files changed, 22 insertions(+), 1 deletions(-) Changeset truncated at 500 lines: diff --git a/server/ctdb_recoverd.c b/server/ctdb_recoverd.c index fa4b6ba..e77bd41 100644 --- a/server/ctdb_recoverd.c +++ b/server/ctdb_recoverd.c @@ -3010,6 +3010,13 @@ static void main_loop(struct ctdb_context *ctdb, struct ctdb_recoverd *rec, } nodemap = rec->nodemap; + /* update the capabilities for all nodes */ + ret = update_capabilities(ctdb, nodemap); + if (ret != 0) { + DEBUG(DEBUG_ERR, (__location__ " Unable to update node capabilities.\n")); + return; + } + /* check which node is the recovery master */ ret = ctdb_ctrl_getrecmaster(ctdb, mem_ctx, CONTROL_TIMEOUT(), pnn, &rec->recmaster); if (ret != 0) { @@ -3032,7 +3039,6 @@ static void main_loop(struct ctdb_context *ctdb, struct ctdb_recoverd *rec, return; } - /* if the local daemon is STOPPED, we verify that the databases are also frozen and thet the recmode is set to active */ @@ -3067,6 +3073,21 @@ static void main_loop(struct ctdb_context *ctdb, struct ctdb_recoverd *rec, return; } + /* + * if the current recmaster do not have CTDB_CAP_RECMASTER, + * but we have force an election and try to become the new + * recmaster + */ + if ((rec->ctdb->nodes[rec->recmaster]->capabilities & CTDB_CAP_RECMASTER) == 0 && + (rec->ctdb->capabilities & CTDB_CAP_RECMASTER) && + !(nodemap->nodes[pnn].flags & NODE_FLAGS_INACTIVE)) { + DEBUG(DEBUG_ERR, (__location__ " Current recmaster node %u does not have CAP_RECMASTER," + " but we (node %u) have - force an election\n", + rec->recmaster, pnn)); + force_election(rec, pnn, nodemap); + return; + } + /* check that we (recovery daemon) and the local ctdb daemon agrees on whether we are banned or not */ -- CTDB repository