]> git.ipfire.org Git - thirdparty/git.git/commitdiff
refs/reftable: allow configuring geometric factor
authorPatrick Steinhardt <ps@pks.im>
Mon, 13 May 2024 08:18:43 +0000 (10:18 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 14 May 2024 00:02:39 +0000 (17:02 -0700)
Allow configuring the geometric factor used by the auto-compaction
algorithm whenever a new table is appended to the stack of tables.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/config/reftable.txt
refs/reftable-backend.c

index 68083876fa556d1d6bf3a3c2d10c09bb22d621b1..0515727977833983085398e791b0f2788b538fdd 100644 (file)
@@ -36,3 +36,13 @@ reftable.indexObjects::
        are a reverse mapping of object ID to the references pointing to them.
 +
 The default value is `true`.
+
+reftable.geometricFactor::
+       Whenever the reftable backend appends a new table to the stack, it
+       performs auto compaction to ensure that there is only a handful of
+       tables. The backend does this by ensuring that tables form a geometric
+       sequence regarding the respective sizes of each table.
++
+By default, the geometric sequence uses a factor of 2, meaning that for any
+table, the next-biggest table must at least be twice as big. A maximum factor
+of 256 is supported.
index 5ffb36770a810f157bd12ab970fb8e89da7cc32d..da620fd5981f67f70a5a3285d9337d0516806bd5 100644 (file)
@@ -247,6 +247,11 @@ static int reftable_be_config(const char *var, const char *value,
                opts->restart_interval = restart_interval;
        } else if (!strcmp(var, "reftable.indexobjects")) {
                opts->skip_index_objects = !git_config_bool(var, value);
+       } else if (!strcmp(var, "reftable.geometricfactor")) {
+               unsigned long factor = git_config_ulong(var, value, ctx->kvi);
+               if (factor > UINT8_MAX)
+                       die("reftable geometric factor cannot exceed %u", (unsigned)UINT8_MAX);
+               opts->auto_compaction_factor = factor;
        }
 
        return 0;