ctdb_ltdb_store_server: when storing a record that is not to be scheduled for deletio...
authorMichael Adam <obnox@samba.org>
Thu, 7 Apr 2011 10:17:42 +0000 (12:17 +0200)
committerMichael Adam <obnox@samba.org>
Fri, 23 Dec 2011 16:39:01 +0000 (17:39 +0100)
Pair-Programmed-With: Stefan Metzmacher <metze@samba.org>

(This used to be ctdb commit 489148e465e2b8aed87ea836e3518f43490671ca)

ctdb/server/ctdb_ltdb_server.c

index 8423388433e5d45723f3a612324cf5054d83fd9b..9a0132a362c098228c30c6541e2ba06d21d91a48 100644 (file)
@@ -51,6 +51,7 @@ static int ctdb_ltdb_store_server(struct ctdb_db_context *ctdb_db,
        bool seqnum_suppressed = false;
        bool keep = false;
        bool schedule_for_deletion = false;
+       bool remove_from_delete_queue = false;
        uint32_t lmaster;
 
        if (ctdb->flags & CTDB_FLAG_TORTURE) {
@@ -122,12 +123,14 @@ static int ctdb_ltdb_store_server(struct ctdb_db_context *ctdb_db,
                keep = true;
        }
 
-       if (keep &&
-           (data.dsize == 0) &&
-           !ctdb_db->persistent &&
-           (ctdb_db->ctdb->pnn == header->dmaster))
-       {
-               schedule_for_deletion = true;
+       if (keep) {
+               if ((data.dsize == 0) &&
+                   !ctdb_db->persistent &&
+                   (ctdb_db->ctdb->pnn == header->dmaster))
+               {
+                       schedule_for_deletion = true;
+               }
+               remove_from_delete_queue = !schedule_for_deletion;
        }
 
 store:
@@ -208,6 +211,7 @@ store:
                            tdb_errorstr(ctdb_db->ltdb->tdb)));
 
                schedule_for_deletion = false;
+               remove_from_delete_queue = false;
        }
        if (seqnum_suppressed) {
                tdb_add_flags(ctdb_db->ltdb->tdb, TDB_SEQNUM);
@@ -223,6 +227,10 @@ store:
                }
        }
 
+       if (remove_from_delete_queue) {
+               ctdb_local_remove_from_delete_queue(ctdb_db, header, key);
+       }
+
        return ret;
 }