From 78a6ff5a3e8e56dc253068724dc4276f05b7473e Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Fri, 11 Mar 2011 15:55:52 +0100 Subject: [PATCH] vacuum: refactor insert_record_into_delete_queue out of ctdb_control_schedule_for_deletion --- server/ctdb_vacuum.c | 65 +++++++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 25 deletions(-) diff --git a/server/ctdb_vacuum.c b/server/ctdb_vacuum.c index e0dd0dde..e34627cf 100644 --- a/server/ctdb_vacuum.c +++ b/server/ctdb_vacuum.c @@ -1271,30 +1271,16 @@ int ctdb_vacuum_init(struct ctdb_db_context *ctdb_db) } /** - * Schedule a record for deletetion. - * Called from the parent context. + * Insert a record into the ctdb_db context's delete queue, + * handling hash collisions. */ -int32_t ctdb_control_schedule_for_deletion(struct ctdb_context *ctdb, - TDB_DATA indata) +static int insert_record_into_delete_queue(struct ctdb_db_context *ctdb_db, + const struct ctdb_ltdb_header *hdr, + TDB_DATA key) { - struct ctdb_control_schedule_for_deletion *dd; - struct ctdb_db_context *ctdb_db; - int ret; - TDB_DATA key; - uint32_t hash; struct delete_record_data *kd; - - dd = (struct ctdb_control_schedule_for_deletion *)indata.dptr; - - ctdb_db = find_ctdb_db(ctdb, dd->db_id); - if (ctdb_db == NULL) { - DEBUG(DEBUG_ERR, (__location__ " Unknown db id 0x%08x\n", - dd->db_id)); - return -1; - } - - key.dsize = dd->keylen; - key.dptr = dd->key; + uint32_t hash; + int ret; hash = (uint32_t)ctdb_hash(&key); @@ -1303,10 +1289,10 @@ int32_t ctdb_control_schedule_for_deletion(struct ctdb_context *ctdb, "key_hash[0x%08x] " "lmaster[%u] " "migrated_with_data[%s]\n", - ctdb_db->db_name, dd->db_id, + ctdb_db->db_name, ctdb_db->db_id, hash, ctdb_lmaster(ctdb_db->ctdb, &key), - dd->hdr.flags & CTDB_REC_FLAG_MIGRATED_WITH_DATA ? "yes" : "no")); + 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) { @@ -1324,9 +1310,9 @@ int32_t ctdb_control_schedule_for_deletion(struct ctdb_context *ctdb, } } - ret = insert_delete_record_data_into_tree(ctdb, ctdb_db, + ret = insert_delete_record_data_into_tree(ctdb_db->ctdb, ctdb_db, ctdb_db->delete_queue, - &dd->hdr, key); + hdr, key); if (ret != 0) { return -1; } @@ -1334,6 +1320,35 @@ int32_t ctdb_control_schedule_for_deletion(struct ctdb_context *ctdb, return 0; } +/** + * Schedule a record for deletetion. + * Called from the parent context. + */ +int32_t ctdb_control_schedule_for_deletion(struct ctdb_context *ctdb, + TDB_DATA indata) +{ + struct ctdb_control_schedule_for_deletion *dd; + struct ctdb_db_context *ctdb_db; + int ret; + TDB_DATA key; + + dd = (struct ctdb_control_schedule_for_deletion *)indata.dptr; + + ctdb_db = find_ctdb_db(ctdb, dd->db_id); + if (ctdb_db == NULL) { + DEBUG(DEBUG_ERR, (__location__ " Unknown db id 0x%08x\n", + dd->db_id)); + return -1; + } + + key.dsize = dd->keylen; + key.dptr = dd->key; + + ret = insert_record_into_delete_queue(ctdb_db, &dd->hdr, key); + + return ret; +} + int32_t ctdb_local_schedule_for_deletion(struct ctdb_db_context *ctdb_db, const struct ctdb_ltdb_header *hdr, TDB_DATA key) -- 2.34.1