Show 50 quoted lines
> When auto-compacting, the reftable library packs references such that
> the sizes of the tables form a geometric sequence. The factor for this
> geometric sequence is hardcoded to 2 right now. We're about to expose
> this as a config option though, so let's expose the factor via write
> options.
>
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
> reftable/reftable-writer.h | 6 ++++++
> reftable/stack.c | 13 +++++++++----
> reftable/stack.h | 3 ++-
> reftable/stack_test.c | 4 ++--
> 4 files changed, 19 insertions(+), 7 deletions(-)
>
> diff --git a/reftable/reftable-writer.h b/reftable/reftable-writer.h
> index 4cd8ebe6c7..155457b042 100644
> --- a/reftable/reftable-writer.h
> +++ b/reftable/reftable-writer.h
> @@ -49,6 +49,12 @@ struct reftable_write_options {
>
> /* boolean: Prevent auto-compaction of tables. */
> unsigned disable_auto_compact : 1;
> +
> + /*
> + * Geometric sequence factor used by auto-compaction to decide which
> + * tables to compact. Defaults to 2 if unset.
> + */
> + uint8_t auto_compaction_factor;
> };
>
> /* reftable_block_stats holds statistics for a single block type */
> diff --git a/reftable/stack.c b/reftable/stack.c
> index 7b4fff7c9e..6b0f8e13e7 100644
> --- a/reftable/stack.c
> +++ b/reftable/stack.c
> @@ -1215,12 +1215,16 @@ static int segment_size(struct segment *s)
> return s->end - s->start;
> }
>
> -struct segment suggest_compaction_segment(uint64_t *sizes, size_t n)
> +struct segment suggest_compaction_segment(uint64_t *sizes, size_t n,
> + uint8_t factor)
> {
> struct segment seg = { 0 };
> uint64_t bytes;
> size_t i;
>
> + if (!factor)
> + factor = 2;
> +