1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-02 09:47:23 +03:00

vacuum: add ctdb_local_remove_from_delete_queue()

Pair-Programmed-With: Stefan Metzmacher <metze@samba.org>

(This used to be ctdb commit a5065b42a98c709173503e02d217f97792878625)
This commit is contained in:
Michael Adam 2011-04-07 12:17:16 +02:00
parent 3dab0c9b0b
commit a481ca711f
2 changed files with 57 additions and 0 deletions

View File

@ -1427,6 +1427,10 @@ int32_t ctdb_local_schedule_for_deletion(struct ctdb_db_context *ctdb_db,
const struct ctdb_ltdb_header *hdr,
TDB_DATA key);
void ctdb_local_remove_from_delete_queue(struct ctdb_db_context *ctdb_db,
const struct ctdb_ltdb_header *hdr,
const TDB_DATA key);
struct ctdb_ltdb_header *ctdb_header_from_record_handle(struct ctdb_record_handle *h);
/* For unit testing ctdb_transaction.c. */

View File

@ -1301,6 +1301,42 @@ int ctdb_vacuum_init(struct ctdb_db_context *ctdb_db)
return 0;
}
static void remove_record_from_delete_queue(struct ctdb_db_context *ctdb_db,
const struct ctdb_ltdb_header *hdr,
const TDB_DATA key)
{
struct delete_record_data *kd;
uint32_t hash;
hash = (uint32_t)ctdb_hash(&key);
DEBUG(DEBUG_DEBUG, (__location__
" remove_record_from_delete_queue: db[%s] "
"db_id[0x%08x] "
"key_hash[0x%08x] "
"lmaster[%u] "
"migrated_with_data[%s]\n",
ctdb_db->db_name, ctdb_db->db_id,
hash,
ctdb_lmaster(ctdb_db->ctdb, &key),
hdr->flags & CTDB_REC_FLAG_MIGRATED_WITH_DATA ? "yes" : "no"));
kd = (struct delete_record_data *)trbt_lookup32(ctdb_db->delete_queue, hash);
if (kd == NULL) {
return;
}
if (kd->key.dsize != key.dsize) {
return;
}
if (memcmp(kd->key.dptr, key.dptr, key.dsize) != 0) {
return;
}
talloc_free(kd);
return;
}
/**
* Insert a record into the ctdb_db context's delete queue,
* handling hash collisions.
@ -1435,3 +1471,20 @@ int32_t ctdb_local_schedule_for_deletion(struct ctdb_db_context *ctdb_db,
return ret;
}
void ctdb_local_remove_from_delete_queue(struct ctdb_db_context *ctdb_db,
const struct ctdb_ltdb_header *hdr,
const TDB_DATA key)
{
if (ctdb_db->ctdb->ctdbd_pid != getpid()) {
/*
* Only remove the record from the delete queue if called
* in the main daemon.
*/
return;
}
remove_record_from_delete_queue(ctdb_db, hdr, key);
return;
}