reftable/reader: separate concerns of table iter and reftable reader

In "reftable/reader.c" we implement two different interfaces: - The reftable reader contains the logic to read reftables. - The table iterator is used to iterate through a single reftable read by the reader. The way those two types are used in the code is somewhat confusing though because seeking inside a table is implemented as if it was part of the reftable reader, even though it is ultimately more of a detail implemented by the table iterator. Make the boundary between those two types clearer by renaming functions that seek records in a table such that they clearly belong to the table iterator's logic. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Patrick Steinhardt committed May 13, 2024 at 10:47 UTC 81a03a323664d3d14a25e2ef8b29fe52dcef2126
1 file changed +15 -17
reftable/reader.c
+15 -17
@@ -386,9 +386,8 @@ static void iterator_from_table_iter(struct reftable_iterator *it,
386 it->ops = &table_iter_vtable;
387 }
388
389 -static int reader_table_iter_at(struct reftable_reader *r,
390 - struct table_iter *ti, uint64_t off,
391 - uint8_t typ)
389 +static int table_iter_seek_to(struct table_iter *ti, struct reftable_reader *r,
390 + uint64_t off, uint8_t typ)
391 {
392 int err;
393
@@ -403,8 +402,8 @@ static int reader_table_iter_at(struct reftable_reader *r,
402 return 0;
403 }
404
406 -static int reader_start(struct reftable_reader *r, struct table_iter *ti,
407 - uint8_t typ, int index)
405 +static int table_iter_seek_start(struct table_iter *ti, struct reftable_reader *r,
406 + uint8_t typ, int index)
407 {
408 struct reftable_reader_offsets *offs = reader_offsets_for(r, typ);
409 uint64_t off = offs->offset;
@@ -416,11 +415,11 @@ static int reader_start(struct reftable_reader *r, struct table_iter *ti,
415 typ = BLOCK_TYPE_INDEX;
416 }
417
419 - return reader_table_iter_at(r, ti, off, typ);
418 + return table_iter_seek_to(ti, r, off, typ);
419 }
420
422 -static int reader_seek_linear(struct table_iter *ti,
423 - struct reftable_record *want)
421 +static int table_iter_seek_linear(struct table_iter *ti,
422 + struct reftable_record *want)
423 {
424 struct strbuf want_key = STRBUF_INIT;
425 struct strbuf got_key = STRBUF_INIT;
@@ -499,9 +498,8 @@ done:
498 return err;
499 }
500
502 -static int reader_seek_indexed(struct table_iter *ti,
503 - struct reftable_reader *r,
504 - struct reftable_record *rec)
501 +static int table_iter_seek_indexed(struct table_iter *ti,
502 + struct reftable_record *rec)
503 {
504 struct reftable_record want_index = {
505 .type = BLOCK_TYPE_INDEX, .u.idx = { .last_key = STRBUF_INIT }
@@ -520,7 +518,7 @@ static int reader_seek_indexed(struct table_iter *ti,
518 * highest layer that identifies the relevant index block as well as
519 * the record inside that block that corresponds to our wanted key.
520 */
523 - err = reader_seek_linear(ti, &want_index);
521 + err = table_iter_seek_linear(ti, &want_index);
522 if (err < 0)
523 goto done;
524
@@ -550,7 +548,7 @@ static int reader_seek_indexed(struct table_iter *ti,
548 if (err != 0)
549 goto done;
550
553 - err = reader_table_iter_at(r, ti, index_result.u.idx.offset, 0);
551 + err = table_iter_seek_to(ti, ti->r, index_result.u.idx.offset, 0);
552 if (err != 0)
553 goto done;
554
@@ -585,14 +583,14 @@ static int reader_seek_internal(struct reftable_reader *r,
583 struct table_iter ti = TABLE_ITER_INIT, *p;
584 int err;
585
588 - err = reader_start(r, &ti, reftable_record_type(rec), !!idx);
586 + err = table_iter_seek_start(&ti, r, reftable_record_type(rec), !!idx);
587 if (err < 0)
588 goto out;
589
590 if (idx)
593 - err = reader_seek_indexed(&ti, r, rec);
591 + err = table_iter_seek_indexed(&ti, rec);
592 else
595 - err = reader_seek_linear(&ti, rec);
593 + err = table_iter_seek_linear(&ti, rec);
594 if (err)
595 goto out;
596
@@ -742,7 +740,7 @@ static int reftable_reader_refs_for_unindexed(struct reftable_reader *r,
740 int err;
741
742 *ti = ti_empty;
745 - err = reader_start(r, ti, BLOCK_TYPE_REF, 0);
743 + err = table_iter_seek_start(ti, r, BLOCK_TYPE_REF, 0);
744 if (err < 0) {
745 reftable_free(ti);
746 return err;