| 1601 | } |
| 1602 | |
| 1603 | static int stack_segments_for_compaction(struct reftable_stack *st, |
| 1604 | struct segment *seg) |
| 1605 | { |
| 1606 | int version = (st->opts.hash_id == REFTABLE_HASH_SHA1) ? 1 : 2; |
| 1607 | int overhead = header_size(version) - 1; |
| 1608 | uint64_t *sizes; |
| 1609 | |
| 1610 | REFTABLE_CALLOC_ARRAY(sizes, st->merged->tables_len); |
| 1611 | if (!sizes) |
| 1612 | return REFTABLE_OUT_OF_MEMORY_ERROR; |
| 1613 | |
| 1614 | for (size_t i = 0; i < st->merged->tables_len; i++) |
| 1615 | sizes[i] = st->tables[i]->size - overhead; |
| 1616 | |
| 1617 | *seg = suggest_compaction_segment(sizes, st->merged->tables_len, |
| 1618 | st->opts.auto_compaction_factor); |
| 1619 | reftable_free(sizes); |
| 1620 | |
| 1621 | return 0; |
| 1622 | } |
| 1623 | |
| 1624 | static int update_segment_if_compaction_required(struct reftable_stack *st, |
| 1625 | struct segment *seg, |
no test coverage detected