The branch, master has been updated via 6b9d308985ef2363c62fde6340ad37d56f6d7702 (commit) via 88ad1e75c686cd47aec18b0a8eb93c3b125f0e97 (commit) via 0f070a65a322bd6d3240ca96a9e5c3633ef647bf (commit) via 39a5c0d8cca4ce5e8bc7055739a6377fb2dc36e0 (commit) via 4ae564e415560cde7e4cd4c5a1d7699f3d49621b (commit) via 057023f5843c91d1cf8512f3675a01a119ea6157 (commit) from 66af6659eaffaeafbfa58779162aabe915d1c50f (commit)
http://gitweb.samba.org/?p=ctdb.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 6b9d308985ef2363c62fde6340ad37d56f6d7702 Author: Michael Adam <ob...@samba.org> Date: Fri Nov 25 13:55:20 2011 +0100 vacuum: write a big and up-to-date explaining comment for ctdb_vacuum_db() commit 88ad1e75c686cd47aec18b0a8eb93c3b125f0e97 Author: Michael Adam <ob...@samba.org> Date: Fri Nov 25 13:54:48 2011 +0100 vacuum: fix a comment typo in vacuum_traverse() commit 0f070a65a322bd6d3240ca96a9e5c3633ef647bf Author: Michael Adam <ob...@samba.org> Date: Fri Nov 25 13:35:05 2011 +0100 vacuum: fix horrible indentation/whitespacing for ctdb_vacuum_event() commit 39a5c0d8cca4ce5e8bc7055739a6377fb2dc36e0 Author: Michael Adam <ob...@samba.org> Date: Fri Nov 25 13:34:15 2011 +0100 vacuum: fix a comment typo in vacuum_traverse() commit 4ae564e415560cde7e4cd4c5a1d7699f3d49621b Author: Michael Adam <ob...@samba.org> Date: Fri Nov 25 13:25:27 2011 +0100 vacuum: fix an abundance of indentation white spaces in ctdb_vacuum_db() commit 057023f5843c91d1cf8512f3675a01a119ea6157 Author: Michael Adam <ob...@samba.org> Date: Fri Nov 25 13:23:23 2011 +0100 vacuum: rename "size" to "freelist_size" for clarity ----------------------------------------------------------------------- Summary of changes: server/ctdb_vacuum.c | 65 +++++++++++++++++++++++++++++++++++-------------- 1 files changed, 46 insertions(+), 19 deletions(-) Changeset truncated at 500 lines: diff --git a/server/ctdb_vacuum.c b/server/ctdb_vacuum.c index 2be3e4b..e30b6e8 100644 --- a/server/ctdb_vacuum.c +++ b/server/ctdb_vacuum.c @@ -206,8 +206,8 @@ static int add_record_to_vacuum_fetch_list(struct vacuum_data *vdata, } -static void ctdb_vacuum_event(struct event_context *ev, struct timed_event *te, - struct timeval t, void *private_data); +static void ctdb_vacuum_event(struct event_context *ev, struct timed_event *te, + struct timeval t, void *private_data); /* @@ -236,7 +236,7 @@ static int vacuum_traverse(struct tdb_context *tdb, TDB_DATA key, TDB_DATA data, } if (data.dsize != sizeof(struct ctdb_ltdb_header)) { - /* its not a deleted record */ + /* it is not a deleted record */ vdata->full_skipped++; return 0; } @@ -250,7 +250,7 @@ static int vacuum_traverse(struct tdb_context *tdb, TDB_DATA key, TDB_DATA data, if (lmaster == ctdb->pnn) { /* - * We are both lmaster and dmaster, and the record * is empty. + * We are both lmaster and dmaster, and the record is empty. * So we should be able to delete it. */ res = add_record_to_delete_tree(vdata, key, hdr); @@ -435,11 +435,37 @@ done: return 0; } -/* - * read-only traverse the database in order to find - * records that can be deleted and try to delete these - * records on the other nodes - * this executes in the child context +/** + * Vacuum a DB: + * - Always do the fast vacuuming run, which traverses + * the in-memory delete queue: these records have been + * scheduled for deletion. + * - Only if explicitly requested, the database is traversed + * in order to use the traditional heuristics on empty records + * to trigger deletion. + * This is done only every VacuumFastPathCount'th vacuuming run. + * + * The traverse runs fill two lists: + * + * - The delete_list: + * This is the list of empty records the current + * node is lmaster and dmaster for. These records are later + * deleted first on other nodes and then locally. + * + * The fast vacuuming run has a short cut for those records + * that have never been migrated with data: these records + * are immediately deleted locally, since they have left + * no trace on other nodes. + * + * - The vacuum_fetch lists + * (one for each other lmaster node): + * The records in this list are sent for deletion to + * their lmaster in a bulk VACUUM_FETCH message. + * + * The lmaster then migrates all these records to itelf + * so that they can be vacuumed there. + * + * This executes in the child context. */ static int ctdb_vacuum_db(struct ctdb_db_context *ctdb_db, struct vacuum_data *vdata, @@ -488,8 +514,8 @@ static int ctdb_vacuum_db(struct ctdb_db_context *ctdb_db, } for (i = 0; i < ctdb->num_nodes; i++) { vdata->list[i] = (struct ctdb_marshall_buffer *) - talloc_zero_size(vdata->list, - offsetof(struct ctdb_marshall_buffer, data)); + talloc_zero_size(vdata->list, + offsetof(struct ctdb_marshall_buffer, data)); if (vdata->list[i] == NULL) { DEBUG(DEBUG_ERR,(__location__ " Out of memory\n")); return -1; @@ -939,11 +965,11 @@ static int ctdb_vacuum_and_repack_db(struct ctdb_db_context *ctdb_db, uint32_t repack_limit = ctdb_db->ctdb->tunable.repack_limit; uint32_t vacuum_limit = ctdb_db->ctdb->tunable.vacuum_limit; const char *name = ctdb_db->db_name; - int size; + int freelist_size; struct vacuum_data *vdata; - size = tdb_freelist_size(ctdb_db->ltdb->tdb); - if (size == -1) { + freelist_size = tdb_freelist_size(ctdb_db->ltdb->tdb); + if (freelist_size == -1) { DEBUG(DEBUG_ERR,(__location__ " Failed to get freelist size for '%s'\n", name)); return -1; } @@ -977,25 +1003,26 @@ static int ctdb_vacuum_and_repack_db(struct ctdb_db_context *ctdb_db, /* * decide if a repack is necessary */ - if (size < repack_limit && vdata->delete_count < vacuum_limit) { - update_tuning_db(ctdb_db, vdata, size); + if (freelist_size < repack_limit && vdata->delete_count < vacuum_limit) + { + update_tuning_db(ctdb_db, vdata, freelist_size); talloc_free(vdata); return 0; } DEBUG(DEBUG_INFO,("Repacking %s with %u freelist entries and %u records to delete\n", - name, size, vdata->delete_count)); + name, freelist_size, vdata->delete_count)); /* * repack and implicitely get rid of the records we can delete */ if (ctdb_repack_tdb(ctdb_db->ltdb->tdb, mem_ctx, vdata) != 0) { DEBUG(DEBUG_ERR,(__location__ " Failed to repack '%s'\n", name)); - update_tuning_db(ctdb_db, vdata, size); + update_tuning_db(ctdb_db, vdata, freelist_size); talloc_free(vdata); return -1; } - update_tuning_db(ctdb_db, vdata, size); + update_tuning_db(ctdb_db, vdata, freelist_size); talloc_free(vdata); return 0; -- CTDB repository