From: Patrick Steinhardt <ps@pks.im>
To: Justin Tobler <jltobler@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 05/16] reftable/table: move reading block into block reader
Date: Mon, 7 Apr 2025 14:31:10 +0200 [thread overview]
Message-ID: <Z_PFjr9p4u4MA4yD@pks.im> (raw)
In-Reply-To: <umaolgemnks4g4cgwgnurl7alic2a3pzrfx2ws3s7uxypiedia@7mwqxvhw2zxg>
On Wed, Apr 02, 2025 at 03:13:03PM -0500, Justin Tobler wrote:
> On 25/03/31 10:41AM, Patrick Steinhardt wrote:
> > diff --git a/reftable/block.c b/reftable/block.c
> > index f2567a8f0fd..2517108b8ef 100644
> > --- a/reftable/block.c
> > +++ b/reftable/block.c
> > @@ -209,31 +209,57 @@ int block_writer_finish(struct block_writer *w)
> > return w->next;
> > }
> >
> > -int block_reader_init(struct block_reader *br, struct reftable_block *block,
> > - uint32_t header_off, uint32_t table_block_size,
> > - uint32_t hash_size)
> > +static int read_block(struct reftable_block_source *source,
> > + struct reftable_block *dest, uint64_t off,
> > + uint32_t sz)
> > {
> > + size_t size = block_source_size(source);
> > + block_source_return_block(dest);
> > + if (off >= size)
> > + return 0;
> > + if (off + sz > size)
> > + sz = size - off;
> > + return block_source_read_block(source, dest, off, sz);
> > +}
> > +
> > +int block_reader_init(struct block_reader *br,
> > + struct reftable_block_source *source,
> > + uint32_t offset, uint32_t header_size,
> > + uint32_t table_block_size, uint32_t hash_size)
> > +{
> > + uint32_t guess_block_size = table_block_size ?
> > + table_block_size : DEFAULT_BLOCK_SIZE;
>
> Out of curiousity, in what scenarios would the table not know the block
> size and we have to rely on the guess?
By default, reftable blocks are aligned with padding, and if so the
block size is tracked as part of the footer and well-known. Ideally, the
block size would be picked so that it is the same as your disk sector
size. Git picks 4kB by default.
There is another mode though: reftable blocks can be unaligned, so the
padding is dropped. Consequently there is no fixed block siz, and this
is indicated by having a block size of 0 in the header/trailer.
Patrick
next prev parent reply other threads:[~2025-04-07 12:31 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-31 8:41 [PATCH 00/16] reftable: overhaul the API to expose access to blocks Patrick Steinhardt
2025-03-31 8:41 ` [PATCH 01/16] reftable: fix formatting of the license header Patrick Steinhardt
2025-03-31 8:41 ` [PATCH 02/16] reftable/reader: rename data structure to "table" Patrick Steinhardt
2025-03-31 8:41 ` [PATCH 03/16] reftable/blocksource: consolidate code into a single file Patrick Steinhardt
2025-04-02 17:42 ` Justin Tobler
2025-04-03 10:42 ` Karthik Nayak
2025-03-31 8:41 ` [PATCH 04/16] reftable/block: simplify how we track restart points Patrick Steinhardt
2025-04-02 18:08 ` Justin Tobler
2025-04-03 15:17 ` Karthik Nayak
2025-04-07 12:31 ` Patrick Steinhardt
2025-03-31 8:41 ` [PATCH 05/16] reftable/table: move reading block into block reader Patrick Steinhardt
2025-04-02 20:13 ` Justin Tobler
2025-04-07 12:31 ` Patrick Steinhardt [this message]
2025-03-31 8:41 ` [PATCH 06/16] reftable/block: rename `block` to `block_data` Patrick Steinhardt
2025-04-02 20:26 ` Justin Tobler
2025-04-07 12:30 ` Patrick Steinhardt
2025-03-31 8:41 ` [PATCH 07/16] reftable/block: rename `block_reader` to `reftable_block` Patrick Steinhardt
2025-04-02 20:39 ` Justin Tobler
2025-04-07 12:30 ` Patrick Steinhardt
2025-03-31 8:41 ` [PATCH 08/16] git-zlib: use `struct z_stream_s` instead of typedef Patrick Steinhardt
2025-03-31 8:41 ` [PATCH 09/16] reftable/block: create public interface for reading blocks Patrick Steinhardt
2025-03-31 8:41 ` [PATCH 10/16] reftable/block: store block pointer in the block iterator Patrick Steinhardt
2025-04-02 20:56 ` Justin Tobler
2025-04-07 12:31 ` Patrick Steinhardt
2025-03-31 8:41 ` [PATCH 11/16] reftable/block: make block iterators reseekable Patrick Steinhardt
2025-04-02 21:24 ` Justin Tobler
2025-04-07 12:30 ` Patrick Steinhardt
2025-03-31 8:41 ` [PATCH 12/16] reftable/block: expose a generic iterator over reftable records Patrick Steinhardt
2025-03-31 8:41 ` [PATCH 13/16] reftable/table: add `reftable_table` to the public interface Patrick Steinhardt
2025-03-31 8:41 ` [PATCH 14/16] reftable/table: introduce iterator for table blocks Patrick Steinhardt
2025-04-01 22:08 ` Junio C Hamano
2025-04-02 7:21 ` Patrick Steinhardt
2025-04-02 21:46 ` Justin Tobler
2025-04-07 12:31 ` Patrick Steinhardt
2025-03-31 8:41 ` [PATCH 15/16] reftable/constants: make block types part of the public interface Patrick Steinhardt
2025-03-31 8:41 ` [PATCH 16/16] reftable/table: move printing logic into test helper Patrick Steinhardt
2025-04-02 21:52 ` Justin Tobler
2025-04-07 13:16 ` [PATCH v2 00/16] reftable: overhaul the API to expose access to blocks Patrick Steinhardt
2025-04-07 13:16 ` [PATCH v2 01/16] reftable: fix formatting of the license header Patrick Steinhardt
2025-04-07 13:16 ` [PATCH v2 02/16] reftable/reader: rename data structure to "table" Patrick Steinhardt
2025-04-07 13:16 ` [PATCH v2 03/16] reftable/blocksource: consolidate code into a single file Patrick Steinhardt
2025-04-07 13:16 ` [PATCH v2 04/16] reftable/block: simplify how we track restart points Patrick Steinhardt
2025-04-07 13:16 ` [PATCH v2 05/16] reftable/table: move reading block into block reader Patrick Steinhardt
2025-04-07 13:16 ` [PATCH v2 06/16] reftable/block: rename `block` to `block_data` Patrick Steinhardt
2025-04-07 13:16 ` [PATCH v2 07/16] reftable/block: rename `block_reader` to `reftable_block` Patrick Steinhardt
2025-04-07 13:16 ` [PATCH v2 08/16] git-zlib: use `struct z_stream_s` instead of typedef Patrick Steinhardt
2025-04-07 13:16 ` [PATCH v2 09/16] reftable/block: create public interface for reading blocks Patrick Steinhardt
2025-04-07 13:16 ` [PATCH v2 10/16] reftable/block: store block pointer in the block iterator Patrick Steinhardt
2025-04-07 13:16 ` [PATCH v2 11/16] reftable/block: make block iterators reseekable Patrick Steinhardt
2025-04-07 13:16 ` [PATCH v2 12/16] reftable/block: expose a generic iterator over reftable records Patrick Steinhardt
2025-04-07 13:16 ` [PATCH v2 13/16] reftable/table: add `reftable_table` to the public interface Patrick Steinhardt
2025-04-07 13:16 ` [PATCH v2 14/16] reftable/table: introduce iterator for table blocks Patrick Steinhardt
2025-04-07 13:16 ` [PATCH v2 15/16] reftable/constants: make block types part of the public interface Patrick Steinhardt
2025-04-07 13:16 ` [PATCH v2 16/16] reftable/table: move printing logic into test helper Patrick Steinhardt
2025-04-14 19:42 ` [PATCH v2 00/16] reftable: overhaul the API to expose access to blocks Justin Tobler
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z_PFjr9p4u4MA4yD@pks.im \
--to=ps@pks.im \
--cc=git@vger.kernel.org \
--cc=jltobler@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).