The branch, master has been updated
       via  c76c214be401cb116265ed17ffe6c77c979ded82 (commit)
      from  b6d9a0396fb4b325778d3810dc656f719f31b9f1 (commit)

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


- Log -----------------------------------------------------------------
commit c76c214be401cb116265ed17ffe6c77c979ded82
Author: Andrew Tridgell <[EMAIL PROTECTED]>
Date:   Thu Aug 7 13:34:18 2008 +1000

    cover some corner cases where the persistent database could become
    inconsistent

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

Summary of changes:
 client/ctdb_client.c     |    3 +++
 server/ctdb_persistent.c |    6 ++++--
 2 files changed, 7 insertions(+), 2 deletions(-)


Changeset truncated at 500 lines:

diff --git a/client/ctdb_client.c b/client/ctdb_client.c
index 48eb19d..cec16d1 100644
--- a/client/ctdb_client.c
+++ b/client/ctdb_client.c
@@ -3235,6 +3235,9 @@ again:
                sleep(1);
                if (ctdb_replay_transaction(h) != 0) {
                        DEBUG(DEBUG_ERR,(__location__ " Failed to replay 
transaction\n"));
+                       ctdb_control(ctdb, CTDB_CURRENT_NODE, 
h->ctdb_db->db_id, 
+                                    CTDB_CONTROL_TRANS2_ERROR, 
CTDB_CTRL_FLAG_NOREPLY, 
+                                    tdb_null, NULL, NULL, NULL, NULL, NULL);   
        
                        talloc_free(h);
                        return -1;
                }
diff --git a/server/ctdb_persistent.c b/server/ctdb_persistent.c
index 77cff9c..6a8a100 100644
--- a/server/ctdb_persistent.c
+++ b/server/ctdb_persistent.c
@@ -463,6 +463,8 @@ int32_t ctdb_control_trans2_finished(struct ctdb_context 
*ctdb,
 
        if (client->num_persistent_updates == 0) {
                DEBUG(DEBUG_ERR, (__location__ " ERROR: num_persistent_updates 
== 0\n"));
+               DEBUG(DEBUG_ERR,(__location__ " Forcing recovery\n"));
+               client->ctdb->recovery_mode = CTDB_RECOVERY_ACTIVE;
                return -1;
        }
        client->num_persistent_updates--;
@@ -481,9 +483,9 @@ int32_t ctdb_control_trans2_error(struct ctdb_context *ctdb,
        
        if (client->num_persistent_updates == 0) {
                DEBUG(DEBUG_ERR, (__location__ " ERROR: num_persistent_updates 
== 0\n"));
-               return -1;
+       } else {
+               client->num_persistent_updates--;
        }
-       client->num_persistent_updates--;
 
        DEBUG(DEBUG_ERR,(__location__ " Forcing recovery\n"));
        client->ctdb->recovery_mode = CTDB_RECOVERY_ACTIVE;


-- 
CTDB repository

Reply via email to