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

Reply via email to