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:
parent
3dab0c9b0b
commit
a481ca711f
@ -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. */
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user