diff options
author | Michael Adam <obnox@samba.org> | 2010-12-28 13:19:22 +0100 |
---|---|---|
committer | Michael Adam <obnox@samba.org> | 2011-03-14 13:35:51 +0100 |
commit | 6506314c4af7ca2bcc0fe08017376159f1a77b6d (patch) | |
tree | 3cfeaf862d2099cecc8b32fb9285da14e761974f | |
parent | 1924d0d365e10ac8f2157198fb08d76708c8b5bc (diff) | |
download | samba-6506314c4af7ca2bcc0fe08017376159f1a77b6d.tar.gz samba-6506314c4af7ca2bcc0fe08017376159f1a77b6d.tar.xz samba-6506314c4af7ca2bcc0fe08017376159f1a77b6d.zip |
ctdb_ltdb_store_server: add ability to send SCHEDULE_FOR_DELETION control to ctdb_ltdb_store.
(This used to be ctdb commit ab2711701999a5ecc23a36b3d9ba8e94f92e4c87)
-rw-r--r-- | ctdb/server/ctdb_ltdb_server.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/ctdb/server/ctdb_ltdb_server.c b/ctdb/server/ctdb_ltdb_server.c index 48b0852777..c919b73109 100644 --- a/ctdb/server/ctdb_ltdb_server.c +++ b/ctdb/server/ctdb_ltdb_server.c @@ -55,7 +55,8 @@ static int ctdb_fetch_func(struct ctdb_call_info *call) * * This is the server-variant of the ctdb_ltdb_store function. * It contains logic to determine whether a record should be - * stored or deleted. + * stored or deleted. It also sends SCHEDULE_FOR_DELETION + * controls to the local ctdb daemon if apporpriate. */ static int ctdb_ltdb_store_server(struct ctdb_db_context *ctdb_db, TDB_DATA key, @@ -67,6 +68,7 @@ static int ctdb_ltdb_store_server(struct ctdb_db_context *ctdb_db, int ret; bool seqnum_suppressed = false; bool keep = false; + bool schedule_for_deletion = false; uint32_t lmaster; if (ctdb->flags & CTDB_FLAG_TORTURE) { @@ -127,6 +129,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; + } + store: /* * The VACUUM_MIGRATED flag is only set temporarily for @@ -195,6 +205,8 @@ store: ctdb_db->db_name, keep?"store":"delete", ret, tdb_errorstr(ctdb_db->ltdb->tdb))); + + schedule_for_deletion = false; } if (seqnum_suppressed) { tdb_add_flags(ctdb_db->ltdb->tdb, TDB_SEQNUM); @@ -202,6 +214,14 @@ store: talloc_free(rec.dptr); + if (schedule_for_deletion) { + int ret2; + ret2 = ctdb_local_schedule_for_deletion(ctdb_db, header, key); + if (ret != 0) { + DEBUG(DEBUG_ERR, (__location__ " ctdb_local_schedule_for_deletion failed.\n")); + } + } + return ret; } |