ctdb-recoverd: For persistent databases a sequence number of 0 is valid
authorMartin Schwenke <martin@meltin.net>
Fri, 15 Nov 2013 04:20:40 +0000 (15:20 +1100)
committerMichael Adam <obnox@samba.org>
Wed, 27 Nov 2013 17:46:16 +0000 (18:46 +0100)
Otherwise recovery ends up done by RSN when it is unnecessary.

Signed-off-by: Martin Schwenke <martin@meltin.net>
Pair-programmed-with: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Michael Adam <obnox@samba.org>
ctdb/server/ctdb_recoverd.c

index 6820ec92f201e4c2e762da9f01c7823d53f9e425..70ed87e355a4f212ed19b93dd6a8050b58900009 100644 (file)
@@ -739,7 +739,8 @@ static void pull_seqnum_cb(struct ctdb_context *ctdb, uint32_t node_pnn, int32_t
 
        seqnum = *((uint64_t *)outdata.dptr);
 
-       if (seqnum > cb_data->seqnum) {
+       if (seqnum > cb_data->seqnum ||
+           (cb_data->pnn == -1 && seqnum == 0)) {
                cb_data->seqnum = seqnum;
                cb_data->pnn = node_pnn;
        }
@@ -802,7 +803,7 @@ static int pull_highest_seqnum_pdb(struct ctdb_context *ctdb,
                return -1;
        }
 
-       if (cb_data->seqnum == 0 || cb_data->pnn == -1) {
+       if (cb_data->pnn == -1) {
                DEBUG(DEBUG_NOTICE, ("Failed to find a node with highest sequence numbers for DB 0x%08x\n", dbid));
                talloc_free(tmp_ctx);
                return -1;