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