reftable/stack: handle allocation failures in auto compaction
Handle allocation failures in `reftable_stack_auto_compact()`. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
694af039f5
commit
5b67cc6477
@ -1518,6 +1518,8 @@ static uint64_t *stack_table_sizes_for_compaction(struct reftable_stack *st)
|
|||||||
uint64_t *sizes;
|
uint64_t *sizes;
|
||||||
|
|
||||||
REFTABLE_CALLOC_ARRAY(sizes, st->merged->readers_len);
|
REFTABLE_CALLOC_ARRAY(sizes, st->merged->readers_len);
|
||||||
|
if (!sizes)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
for (size_t i = 0; i < st->merged->readers_len; i++)
|
for (size_t i = 0; i < st->merged->readers_len; i++)
|
||||||
sizes[i] = st->readers[i]->size - overhead;
|
sizes[i] = st->readers[i]->size - overhead;
|
||||||
@ -1527,11 +1529,17 @@ static uint64_t *stack_table_sizes_for_compaction(struct reftable_stack *st)
|
|||||||
|
|
||||||
int reftable_stack_auto_compact(struct reftable_stack *st)
|
int reftable_stack_auto_compact(struct reftable_stack *st)
|
||||||
{
|
{
|
||||||
uint64_t *sizes = stack_table_sizes_for_compaction(st);
|
struct segment seg;
|
||||||
struct segment seg =
|
uint64_t *sizes;
|
||||||
suggest_compaction_segment(sizes, st->merged->readers_len,
|
|
||||||
|
sizes = stack_table_sizes_for_compaction(st);
|
||||||
|
if (!sizes)
|
||||||
|
return REFTABLE_OUT_OF_MEMORY_ERROR;
|
||||||
|
|
||||||
|
seg = suggest_compaction_segment(sizes, st->merged->readers_len,
|
||||||
st->opts.auto_compaction_factor);
|
st->opts.auto_compaction_factor);
|
||||||
reftable_free(sizes);
|
reftable_free(sizes);
|
||||||
|
|
||||||
if (segment_size(&seg) > 0)
|
if (segment_size(&seg) > 0)
|
||||||
return stack_compact_range(st, seg.start, seg.end - 1,
|
return stack_compact_range(st, seg.start, seg.end - 1,
|
||||||
NULL, STACK_COMPACT_RANGE_BEST_EFFORT);
|
NULL, STACK_COMPACT_RANGE_BEST_EFFORT);
|
||||||
|
Reference in New Issue
Block a user