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)
committerAmitay Isaacs <amitay@gmail.com>
Thu, 18 Apr 2013 04:05:40 +0000 (14:05 +1000)
Pair-Programmed-With: Stefan Metzmacher <metze@samba.org>
(cherry picked from commit 489148e465e2b8aed87ea836e3518f43490671ca)

server/ctdb_ltdb_server.c

index c9cf021bfbc03e9d28ac094df1edc48d56dd51d4..9ff53fea5604e0332e01ca323475925985462854 100644 (file)
@@ -90,6 +90,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) {
@@ -161,12 +162,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:
@@ -247,6 +250,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);
@@ -262,6 +266,10 @@ store:
                }
        }
 
+       if (remove_from_delete_queue) {
+               ctdb_local_remove_from_delete_queue(ctdb_db, header, key);
+       }
+
        return ret;
 }