225
const char **names,
226
int reuse_open)
227
{
228
- size_t cur_len = !st->merged ? 0 : st->merged->stack_len;
228
+ size_t cur_len = !st->merged ? 0 : st->merged->readers_len;
229
struct reftable_reader **cur = stack_copy_readers(st, cur_len);
230
size_t names_len = names_length(names);
231
struct reftable_reader **new_readers =
232
reftable_calloc(names_len, sizeof(*new_readers));
233
- struct reftable_table *new_tables =
234
- reftable_calloc(names_len, sizeof(*new_tables));
233
size_t new_readers_len = 0;
234
struct reftable_merged_table *new_merged = NULL;
235
struct strbuf table_path = STRBUF_INIT;
265
}
266
267
new_readers[new_readers_len] = rd;
270
- reftable_table_from_reader(&new_tables[new_readers_len], rd);
268
new_readers_len++;
269
}
270
271
/* success! */
275
- err = reftable_merged_table_new(&new_merged, new_tables,
272
+ err = reftable_merged_table_new(&new_merged, new_readers,
273
new_readers_len, st->opts.hash_id);
274
if (err < 0)
275
goto done;
276
280
- new_tables = NULL;
277
st->readers_len = new_readers_len;
278
if (st->merged)
279
reftable_merged_table_free(st->merged);
305
reftable_reader_free(new_readers[i]);
306
}
307
reftable_free(new_readers);
312
- reftable_free(new_tables);
308
reftable_free(cur);
309
strbuf_release(&table_path);
310
return err;
515
}
516
}
517
523
- if (names[st->merged->stack_len]) {
518
+ if (names[st->merged->readers_len]) {
519
err = 1;
520
goto done;
521
}
654
if (add->new_tables_len == 0)
655
goto done;
656
662
- for (i = 0; i < add->stack->merged->stack_len; i++) {
657
+ for (i = 0; i < add->stack->merged->readers_len; i++) {
658
strbuf_addstr(&table_list, add->stack->readers[i]->name);
659
strbuf_addstr(&table_list, "\n");
660
}
834
835
uint64_t reftable_stack_next_update_index(struct reftable_stack *st)
836
{
842
- int sz = st->merged->stack_len;
837
+ int sz = st->merged->readers_len;
838
if (sz > 0)
839
return reftable_reader_max_update_index(st->readers[sz - 1]) +
840
1;
901
size_t first, size_t last,
902
struct reftable_log_expiry_config *config)
903
{
909
- size_t subtabs_len = last - first + 1;
910
- struct reftable_table *subtabs = reftable_calloc(
911
- last - first + 1, sizeof(*subtabs));
904
struct reftable_merged_table *mt = NULL;
905
struct reftable_iterator it = { NULL };
906
struct reftable_ref_record ref = { NULL };
907
struct reftable_log_record log = { NULL };
908
+ size_t subtabs_len = last - first + 1;
909
uint64_t entries = 0;
910
int err = 0;
911
919
- for (size_t i = first, j = 0; i <= last; i++) {
920
- struct reftable_reader *t = st->readers[i];
921
- reftable_table_from_reader(&subtabs[j++], t);
922
- st->stats.bytes += t->size;
923
- }
912
+ for (size_t i = first; i <= last; i++)
913
+ st->stats.bytes += st->readers[i]->size;
914
reftable_writer_set_limits(wr, st->readers[first]->min_update_index,
915
st->readers[last]->max_update_index);
916
927
- err = reftable_merged_table_new(&mt, subtabs, subtabs_len,
917
+ err = reftable_merged_table_new(&mt, st->readers + first, subtabs_len,
918
st->opts.hash_id);
929
- if (err < 0) {
930
- reftable_free(subtabs);
919
+ if (err < 0)
920
goto done;
932
- }
921
922
merged_table_init_iter(mt, &it, BLOCK_TYPE_REF);
923
err = reftable_iterator_seek_ref(&it, "");
1195
* have compacted them.
1196
*/
1197
for (size_t j = 1; j < last - first + 1; j++) {
1210
- const char *old = first + j < st->merged->stack_len ?
1198
+ const char *old = first + j < st->merged->readers_len ?
1199
st->readers[first + j]->name : NULL;
1200
const char *new = names[i + j];
1201
1236
* `fd_read_lines()` uses a `NULL` sentinel to indicate that
1237
* the array is at its end. As we use `free_names()` to free
1238
* the array, we need to include this sentinel value here and
1251
- * thus have to allocate `stack_len + 1` many entries.
1239
+ * thus have to allocate `readers_len + 1` many entries.
1240
*/
1253
- REFTABLE_CALLOC_ARRAY(names, st->merged->stack_len + 1);
1254
- for (size_t i = 0; i < st->merged->stack_len; i++)
1241
+ REFTABLE_CALLOC_ARRAY(names, st->merged->readers_len + 1);
1242
+ for (size_t i = 0; i < st->merged->readers_len; i++)
1243
names[i] = xstrdup(st->readers[i]->name);
1244
first_to_replace = first;
1245
last_to_replace = last;
1346
int reftable_stack_compact_all(struct reftable_stack *st,
1347
struct reftable_log_expiry_config *config)
1348
{
1361
- size_t last = st->merged->stack_len ? st->merged->stack_len - 1 : 0;
1349
+ size_t last = st->merged->readers_len ? st->merged->readers_len - 1 : 0;
1350
return stack_compact_range_stats(st, 0, last, config, 0);
1351
}
1352
1437
int overhead = header_size(version) - 1;
1438
uint64_t *sizes;
1439
1452
- REFTABLE_CALLOC_ARRAY(sizes, st->merged->stack_len);
1440
+ REFTABLE_CALLOC_ARRAY(sizes, st->merged->readers_len);
1441
1454
- for (size_t i = 0; i < st->merged->stack_len; i++)
1442
+ for (size_t i = 0; i < st->merged->readers_len; i++)
1443
sizes[i] = st->readers[i]->size - overhead;
1444
1445
return sizes;
1449
{
1450
uint64_t *sizes = stack_table_sizes_for_compaction(st);
1451
struct segment seg =
1464
- suggest_compaction_segment(sizes, st->merged->stack_len,
1452
+ suggest_compaction_segment(sizes, st->merged->readers_len,
1453
st->opts.auto_compaction_factor);
1454
reftable_free(sizes);
1455
if (segment_size(&seg) > 0)