The branch, 1.2.40 has been updated
       via  9aca0c4c9e50eb9b56c6d0307bc93ffedb84179a (commit)
       via  f4f1c20d789a5756effcae76902964d539b1cdd0 (commit)
      from  1dfb6c1e5fdc9676a7de58bb974f8dddd16e9366 (commit)

http://gitweb.samba.org/?p=ctdb.git;a=shortlog;h=1.2.40


- Log -----------------------------------------------------------------
commit 9aca0c4c9e50eb9b56c6d0307bc93ffedb84179a
Author: Martin Schwenke <mar...@meltin.net>
Date:   Mon Nov 4 15:18:20 2013 +1100

    New version 1.2.69
    
    Signed-off-by: Martin Schwenke <mar...@meltin.net>

commit f4f1c20d789a5756effcae76902964d539b1cdd0
Author: Martin Schwenke <mar...@meltin.net>
Date:   Tue Oct 29 16:38:42 2013 +1100

    Revert "if a new node enters the cluster, that node will already be frozen 
at start"
    
    This is unnecessary due to 03e2e436db5cfd29a56d13f5d2101e42389bfc94.
    Furthermore, if a node doesn't force an election but wins it then it
    can fail to record that it is the new recovery master.  This can lead
    to a reverse split brain where there is no recovery master.
    
    This reverts commit c5035657606283d2e35bea40992505e84ca8e7be.
    
    Signed-off-by: Martin Schwenke <mar...@meltin.net>
    Pair-programmed-with: Amitay Isaacs <ami...@gmail.com>
    
    Conflicts:
        server/ctdb_recoverd.c
    
    (cherry picked from commit c8b542e059a54b8d524bd430cad9d82e5edd864d)

-----------------------------------------------------------------------

Summary of changes:
 packaging/RPM/ctdb.spec.in |    4 +++-
 server/ctdb_recoverd.c     |   33 +++++++++++++--------------------
 2 files changed, 16 insertions(+), 21 deletions(-)


Changeset truncated at 500 lines:

diff --git a/packaging/RPM/ctdb.spec.in b/packaging/RPM/ctdb.spec.in
index baaabbe..51e1f14 100644
--- a/packaging/RPM/ctdb.spec.in
+++ b/packaging/RPM/ctdb.spec.in
@@ -3,7 +3,7 @@ Name: ctdb
 Summary: Clustered TDB
 Vendor: Samba Team
 Packager: Samba Team <sa...@samba.org>
-Version: 1.2.68
+Version: 1.2.69
 Release: 1GITHASH
 Epoch: 0
 License: GNU GPL version 3
@@ -155,6 +155,8 @@ development libraries for ctdb
 
 %changelog
 
+* Mon Nov 04 2013 : Version 1.2.69
+  - Nodes should always update recovery master during an election
 * Tue Sep 10 2013 : Version 1.2.68
   - Use fixed size queue buffers for fair scheduling across tevent FDs
   - Nodes to be used as forced rebalance targets must be healthy
diff --git a/server/ctdb_recoverd.c b/server/ctdb_recoverd.c
index 9f2c71c..f7cee58 100644
--- a/server/ctdb_recoverd.c
+++ b/server/ctdb_recoverd.c
@@ -1962,7 +1962,7 @@ static bool ctdb_election_win(struct ctdb_recoverd *rec, 
struct election_message
 /*
   send out an election request
  */
-static int send_election_request(struct ctdb_recoverd *rec, uint32_t pnn, bool 
update_recmaster)
+static int send_election_request(struct ctdb_recoverd *rec, uint32_t pnn)
 {
        int ret;
        TDB_DATA election_data;
@@ -1978,27 +1978,20 @@ static int send_election_request(struct ctdb_recoverd 
*rec, uint32_t pnn, bool u
        election_data.dptr  = (unsigned char *)&emsg;
 
 
+       /* first we assume we will win the election and set 
+          recoverymaster to be ourself on the current node
+        */
+       ret = ctdb_ctrl_setrecmaster(ctdb, CONTROL_TIMEOUT(), pnn, pnn);
+       if (ret != 0) {
+               DEBUG(DEBUG_ERR, (__location__ " failed to send recmaster 
election request\n"));
+               return -1;
+       }
+
+
        /* send an election message to all active nodes */
        DEBUG(DEBUG_INFO,(__location__ " Send election request to all active 
nodes\n"));
        ctdb_client_send_message(ctdb, CTDB_BROADCAST_ALL, srvid, 
election_data);
 
-
-       /* A new node that is already frozen has entered the cluster.
-          The existing nodes are not frozen and dont need to be frozen
-          until the election has ended and we start the actual recovery
-       */
-       if (update_recmaster == true) {
-               /* first we assume we will win the election and set 
-                  recoverymaster to be ourself on the current node
-                */
-               ret = ctdb_ctrl_setrecmaster(ctdb, CONTROL_TIMEOUT(), pnn, pnn);
-               if (ret != 0) {
-                       DEBUG(DEBUG_ERR, (__location__ " failed to send 
recmaster election request\n"));
-                       return -1;
-               }
-       }
-
-
        return 0;
 }
 
@@ -2036,7 +2029,7 @@ static void election_send_request(struct event_context 
*ev, struct timed_event *
        struct ctdb_recoverd *rec = talloc_get_type(p, struct ctdb_recoverd);
        int ret;
 
-       ret = send_election_request(rec, ctdb_get_pnn(rec->ctdb), false);
+       ret = send_election_request(rec, ctdb_get_pnn(rec->ctdb));
        if (ret != 0) {
                DEBUG(DEBUG_ERR,("Failed to send election request!\n"));
        }
@@ -2392,7 +2385,7 @@ static void force_election(struct ctdb_recoverd *rec, 
uint32_t pnn,
                                                
timeval_current_ofs(ctdb->tunable.election_timeout, 0), 
                                                ctdb_election_timeout, rec);
 
-       ret = send_election_request(rec, pnn, true);
+       ret = send_election_request(rec, pnn);
        if (ret!=0) {
                DEBUG(DEBUG_ERR, (__location__ " failed to initiate recmaster 
election"));
                return;


-- 
CTDB repository

Reply via email to