vacuum: treat value 0 of tunable RepackLimit as turned off.
authorMichael Adam <obnox@samba.org>
Wed, 12 Feb 2014 16:40:31 +0000 (17:40 +0100)
committerAmitay Isaacs <amitay@gmail.com>
Thu, 6 Mar 2014 06:35:30 +0000 (17:35 +1100)
I.e. when RepackLimit is set to 0, no size of the freelist
should trigger a repack in vacuuming.

Signed-off-by: Michael Adam <obnox@samba.org>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
(Imported from commit 48f2d1158820bfb063ba0a0bbfb6f496a8e7522d)

server/ctdb_vacuum.c

index 8291e77b392bb0f8999e04808aa8df8e9f927945..061013d4a08a9df87490c8ba04d21b773322a423 100644 (file)
@@ -1420,7 +1420,7 @@ 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 freelist_size;
+       int freelist_size = 0;
        struct vacuum_data *vdata;
 
        vdata = talloc_zero(mem_ctx, struct vacuum_data);
@@ -1449,17 +1449,19 @@ static int ctdb_vacuum_and_repack_db(struct ctdb_db_context *ctdb_db,
                DEBUG(DEBUG_ERR,(__location__ " Failed to vacuum '%s'\n", name));
        }
 
-       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));
-               talloc_free(vdata);
-               return -1;
+       if (repack_limit != 0) {
+               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));
+                       talloc_free(vdata);
+                       return -1;
+               }
        }
 
        /*
         * decide if a repack is necessary
         */
-       if ((uint32_t)freelist_size < repack_limit &&
+       if ((repack_limit == 0 || (uint32_t)freelist_size < repack_limit) &&
            vdata->delete_left < vacuum_limit)
        {
                talloc_free(vdata);