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

Reply via email to