From: Patrick Steinhardt <ps@pks.im>
To: Karthik Nayak <karthik.188@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 05/18] streaming: allocate stream inside the backend-specific logic
Date: Fri, 21 Nov 2025 07:32:45 +0100 [thread overview]
Message-ID: <aSAHjQKO7R1TvPgj@pks.im> (raw)
In-Reply-To: <CAOLa=ZTF+xzhZv2yXp8L_URk8cjscycheD=Xgdxd=eRGtvpt2A@mail.gmail.com>
On Wed, Nov 19, 2025 at 02:11:40AM -0800, Karthik Nayak wrote:
> Patrick Steinhardt <ps@pks.im> writes:
> > that is specific to backends in "streaming.c".
> >
> > Ideally though, the infrastructure would be reversed: we have a generic
> > `struct odb_read_stream` and some helper functions in "streaming.c",
> > whereas the backend-specific logic sits in the backend's subsystem
> > itself.
> >
>
> Will this also mean that we move the backend specific functions like
> `open_istream_loose()` away from 'streaming.c'? Let's read on.
Yup, exactly.
> > This can be realized by using a design that is similar to how we handle
> > reference databases: instead of having a union of members, we instead
> > have backend-specific structures with a `struct odb_read_stream base`
> > as its first member. The backends would thus hand out the pointer to the
> > base, but internally they know to cast back to the backend-specific
> > type.
> >
>
> Right.
>
> > This means though that we need to allocate different structures
> > depending on the backend. To prepare for this, move allocation of the
> > structure into the backend-specific functions that open a new stream.
> > Subsequent commits will then create those new backend-specific structs.
> >
>
> Who's in charge of free'ing these structs? I see that `close_istream()`
> calls the assigned `close()` function. So this could be handled on the
> backend level. But it also does `free(st)`.
Yeah, this'll be changed later: the `close()` callback will then only
close and release the backend-specific data. `odb_read_stream_close()`
is then responsible for freeing the stream itself.
> > @@ -338,12 +354,16 @@ static int close_istream_pack_non_delta(struct odb_read_stream *st)
> > return 0;
> > }
> >
> > -static int open_istream_pack_non_delta(struct odb_read_stream *st,
> > +static int open_istream_pack_non_delta(struct odb_read_stream **out,
> > struct repository *r UNUSED,
> > const struct object_id *oid UNUSED,
> > struct packed_git *pack,
> > off_t offset)
> > {
> > + struct odb_read_stream stream = {
> > + .close = close_istream_pack_non_delta,
> > + .read = read_istream_pack_non_delta,
> > + };
>
> So this is now statically defined. Won't this cause an issue?
No, it doesn't, as we eventually copy the local stream weh ave here into
the allocated `out` pointer.
Patrick
next prev parent reply other threads:[~2025-11-21 6:32 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-19 7:47 [PATCH 00/18] Refactor object read streams to work via object sources Patrick Steinhardt
2025-11-19 7:47 ` [PATCH 01/18] streaming: rename `git_istream` into `odb_read_stream` Patrick Steinhardt
2025-11-19 18:49 ` Justin Tobler
2025-11-19 20:04 ` Junio C Hamano
2025-11-21 6:31 ` Patrick Steinhardt
2025-11-19 7:47 ` [PATCH 02/18] streaming: drop the `open()` callback function Patrick Steinhardt
2025-11-19 9:39 ` Karthik Nayak
2025-11-19 19:01 ` Justin Tobler
2025-11-21 6:32 ` Patrick Steinhardt
2025-11-19 7:47 ` [PATCH 03/18] streaming: propagate final object type via the stream Patrick Steinhardt
2025-11-19 19:25 ` Justin Tobler
2025-11-21 6:32 ` Patrick Steinhardt
2025-11-19 7:47 ` [PATCH 04/18] streaming: explicitly pass packfile info when streaming a packed object Patrick Steinhardt
2025-11-19 7:47 ` [PATCH 05/18] streaming: allocate stream inside the backend-specific logic Patrick Steinhardt
2025-11-19 10:11 ` Karthik Nayak
2025-11-21 6:32 ` Patrick Steinhardt [this message]
2025-11-19 7:47 ` [PATCH 06/18] streaming: create structure for in-core object streams Patrick Steinhardt
2025-11-19 10:14 ` Karthik Nayak
2025-11-21 6:32 ` Patrick Steinhardt
2025-11-19 7:47 ` [PATCH 07/18] streaming: create structure for loose " Patrick Steinhardt
2025-11-19 7:47 ` [PATCH 08/18] streaming: create structure for packed " Patrick Steinhardt
2025-11-19 7:47 ` [PATCH 09/18] streaming: create structure for filtered " Patrick Steinhardt
2025-11-19 7:47 ` [PATCH 10/18] streaming: move zlib stream into backends Patrick Steinhardt
2025-11-19 7:47 ` [PATCH 11/18] packfile: introduce function to read object info from a store Patrick Steinhardt
2025-11-19 14:48 ` Karthik Nayak
2025-11-21 6:33 ` Patrick Steinhardt
2025-11-19 7:47 ` [PATCH 12/18] streaming: rely on object sources to create object stream Patrick Steinhardt
2025-11-19 16:10 ` Karthik Nayak
2025-11-19 7:47 ` [PATCH 13/18] streaming: get rid of `the_repository` Patrick Steinhardt
2025-11-19 7:47 ` [PATCH 14/18] streaming: make the `odb_read_stream` definition public Patrick Steinhardt
2025-11-19 16:27 ` Karthik Nayak
2025-11-21 6:33 ` Patrick Steinhardt
2025-11-19 7:47 ` [PATCH 15/18] streaming: move logic to read loose objects streams into backend Patrick Steinhardt
2025-11-19 7:47 ` [PATCH 16/18] streaming: move logic to read packed " Patrick Steinhardt
2025-11-19 7:47 ` [PATCH 17/18] streaming: refactor interface to be object-database-centric Patrick Steinhardt
2025-11-19 7:47 ` [PATCH 18/18] streaming: move into object database subsystem Patrick Steinhardt
2025-11-21 7:40 ` [PATCH v2 00/19] Refactor object read streams to work via object sources Patrick Steinhardt
2025-11-21 7:40 ` [PATCH v2 01/19] streaming: rename `git_istream` into `odb_read_stream` Patrick Steinhardt
2025-11-21 7:40 ` [PATCH v2 02/19] streaming: drop the `open()` callback function Patrick Steinhardt
2025-11-21 18:08 ` Junio C Hamano
2025-11-23 18:59 ` Patrick Steinhardt
2025-11-21 7:40 ` [PATCH v2 03/19] streaming: propagate final object type via the stream Patrick Steinhardt
2025-11-21 7:40 ` [PATCH v2 04/19] streaming: explicitly pass packfile info when streaming a packed object Patrick Steinhardt
2025-11-21 7:40 ` [PATCH v2 05/19] streaming: allocate stream inside the backend-specific logic Patrick Steinhardt
2025-11-21 7:40 ` [PATCH v2 06/19] streaming: create structure for in-core object streams Patrick Steinhardt
2025-11-21 7:40 ` [PATCH v2 07/19] streaming: create structure for loose " Patrick Steinhardt
2025-11-21 7:40 ` [PATCH v2 08/19] streaming: create structure for packed " Patrick Steinhardt
2025-11-21 7:40 ` [PATCH v2 09/19] streaming: create structure for filtered " Patrick Steinhardt
2025-11-21 7:40 ` [PATCH v2 10/19] streaming: move zlib stream into backends Patrick Steinhardt
2025-11-21 7:40 ` [PATCH v2 11/19] packfile: introduce function to read object info from a store Patrick Steinhardt
2025-11-21 7:40 ` [PATCH v2 12/19] streaming: rely on object sources to create object stream Patrick Steinhardt
2025-11-21 19:32 ` Junio C Hamano
2025-11-23 18:59 ` Patrick Steinhardt
2025-11-21 7:40 ` [PATCH v2 13/19] streaming: get rid of `the_repository` Patrick Steinhardt
2025-11-21 19:42 ` Junio C Hamano
2025-11-23 18:59 ` Patrick Steinhardt
2025-11-21 7:40 ` [PATCH v2 14/19] streaming: make the `odb_read_stream` definition public Patrick Steinhardt
2025-11-21 7:41 ` [PATCH v2 15/19] streaming: move logic to read loose objects streams into backend Patrick Steinhardt
2025-11-21 7:41 ` [PATCH v2 16/19] streaming: move logic to read packed " Patrick Steinhardt
2025-11-21 7:41 ` [PATCH v2 17/19] streaming: refactor interface to be object-database-centric Patrick Steinhardt
2025-11-22 0:10 ` Junio C Hamano
2025-11-23 18:59 ` Patrick Steinhardt
2025-11-21 7:41 ` [PATCH v2 18/19] streaming: move into object database subsystem Patrick Steinhardt
2025-11-23 2:20 ` Junio C Hamano
2025-11-21 7:41 ` [PATCH v2 19/19] streaming: drop redundant type and size pointers Patrick Steinhardt
2025-11-23 18:59 ` [PATCH v3 00/19] Refactor object read streams to work via object sources Patrick Steinhardt
2025-11-23 18:59 ` [PATCH v3 01/19] streaming: rename `git_istream` into `odb_read_stream` Patrick Steinhardt
2025-11-23 18:59 ` [PATCH v3 02/19] streaming: drop the `open()` callback function Patrick Steinhardt
2025-11-23 18:59 ` [PATCH v3 03/19] streaming: propagate final object type via the stream Patrick Steinhardt
2025-11-23 18:59 ` [PATCH v3 04/19] streaming: explicitly pass packfile info when streaming a packed object Patrick Steinhardt
2025-11-23 18:59 ` [PATCH v3 05/19] streaming: allocate stream inside the backend-specific logic Patrick Steinhardt
2025-11-23 18:59 ` [PATCH v3 06/19] streaming: create structure for in-core object streams Patrick Steinhardt
2025-11-23 18:59 ` [PATCH v3 07/19] streaming: create structure for loose " Patrick Steinhardt
2025-11-23 18:59 ` [PATCH v3 08/19] streaming: create structure for packed " Patrick Steinhardt
2025-11-23 18:59 ` [PATCH v3 09/19] streaming: create structure for filtered " Patrick Steinhardt
2025-11-23 18:59 ` [PATCH v3 10/19] streaming: move zlib stream into backends Patrick Steinhardt
2025-11-23 18:59 ` [PATCH v3 11/19] packfile: introduce function to read object info from a store Patrick Steinhardt
2025-11-23 18:59 ` [PATCH v3 12/19] streaming: rely on object sources to create object stream Patrick Steinhardt
2025-11-23 18:59 ` [PATCH v3 13/19] streaming: get rid of `the_repository` Patrick Steinhardt
2025-11-23 18:59 ` [PATCH v3 14/19] streaming: make the `odb_read_stream` definition public Patrick Steinhardt
2025-11-23 18:59 ` [PATCH v3 15/19] streaming: move logic to read loose objects streams into backend Patrick Steinhardt
2025-11-23 18:59 ` [PATCH v3 16/19] streaming: move logic to read packed " Patrick Steinhardt
2025-11-23 18:59 ` [PATCH v3 17/19] streaming: refactor interface to be object-database-centric Patrick Steinhardt
2025-11-23 18:59 ` [PATCH v3 18/19] streaming: move into object database subsystem Patrick Steinhardt
2025-11-23 18:59 ` [PATCH v3 19/19] streaming: drop redundant type and size pointers Patrick Steinhardt
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=aSAHjQKO7R1TvPgj@pks.im \
--to=ps@pks.im \
--cc=git@vger.kernel.org \
--cc=karthik.188@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.