------------------------------------------------------------
revno: 706
revision-id:[EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Andrew Tridgell <[EMAIL PROTECTED]>
branch nick: tridge.kantana
timestamp: Sat 2008-01-05 09:34:47 +1100
message:
  this fixes the non-dmaster bug that has plagued us for months
modified:
  server/ctdb_recover.c          
ctdb_recover.c-20070503002147-admmfgt1oj6gexfo-1
=== modified file 'server/ctdb_recover.c'
--- a/server/ctdb_recover.c     2008-01-03 22:19:06 +0000
+++ b/server/ctdb_recover.c     2008-01-04 22:34:47 +0000
@@ -303,7 +303,7 @@
 
        rec = (struct ctdb_rec_data *)&reply->data[0];
 
-       DEBUG(3,("starting push of %u records for dbid 0x%x\n",
+       DEBUG(1,("starting push of %u records for dbid 0x%x\n",
                 reply->count, reply->db_id));
 
        for (i=0;i<reply->count;i++) {
@@ -328,31 +328,16 @@
                        DEBUG(0, (__location__ " Unable to fetch record\n"));
                        goto failed;
                }
+
                /* The check for dmaster gives priority to the dmaster
                   if the rsn values are equal */
-               if (header.rsn < hdr->rsn ||
-                   (header.dmaster != ctdb->pnn && header.rsn == hdr->rsn)) {
-#if 0
-                       /* this is a push optimisation - we can skip writing 
the record if:
-
-                              1) this is not a persistent db
-                          AND 2) we are not the recmaster
-                          AND 3) we don't hold the record currently
-                          AND 4) we won't hold the new record
-                       */
-                       if (!ctdb_db->persistent &&
-                           ctdb->recovery_master != ctdb->pnn &&
-                           header.dmaster != ctdb->pnn &&
-                           hdr->dmaster != ctdb->pnn) {
-                               DEBUG(5,("Skipping push of record\n"));
-                       } else 
-#endif
-{
-                               ret = ctdb_ltdb_store(ctdb_db, key, hdr, data);
-                               if (ret != 0) {
-                                       DEBUG(0, (__location__ " Unable to 
store record\n"));
-                                       goto failed;
-                               }
+               if (ctdb->pnn != ctdb->recovery_master ||
+                   header.rsn < hdr->rsn ||
+                   (header.dmaster != ctdb->recovery_master && header.rsn == 
hdr->rsn)) {
+                       ret = ctdb_ltdb_store(ctdb_db, key, hdr, data);
+                       if (ret != 0) {
+                               DEBUG(0, (__location__ " Unable to store 
record\n"));
+                               goto failed;
                        }
                }
 
@@ -389,6 +374,9 @@
                DEBUG(0,(__location__ " failed to write tdb data back  
ret:%d\n",ret));
                return ret;
        }
+
+       /* TODO: add error checking here */
+
        return 0;
 }
 

Reply via email to