git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Patrick Steinhardt <ps@pks.im>
Cc: git@vger.kernel.org,  Karthik Nayak <karthik.188@gmail.com>,
	 Justin Tobler <jltobler@gmail.com>
Subject: Re: [PATCH v2 02/19] streaming: drop the `open()` callback function
Date: Fri, 21 Nov 2025 10:08:22 -0800	[thread overview]
Message-ID: <xmqqqztr45t5.fsf@gitster.g> (raw)
In-Reply-To: <20251121-b4-pks-odb-read-stream-v2-2-ca8534963150@pks.im> (Patrick Steinhardt's message of "Fri, 21 Nov 2025 08:40:47 +0100")

Patrick Steinhardt <ps@pks.im> writes:

> When creating a read stream we first populate the structure with the
> open callback function and then subsequently call the function. This
> layout is somewhat weird though:
>
>   - The structure needs to be allocated and partially populated with the
>     open function before we can properly initialize it.

It is unclear what are left for delayed initialization from this
description.

>   - We never use the `open()` callback after having opened it initially.

I was not sure what this means in v1 and it still is not clear to
me.  Naively the above reads as if it is somehow desirable if we can
call open() after we have already called it on an object.  The flow
being a caller (e.g., stream_blob_to_fd()) first ask open_istream(),
which calls the open method after figuring out which backend knows
about the object and how to open a stream on it, I am not sure what
you want your second and subsequent uses of the open() calklbacks
do.  Puzzled.

> Instead, drop the callback entirely and refactor `istream_source()` so
> that we open the streams immediately. This unblocks a subsequent step,
> where we'll also start to allocate the structure in the source-specific
> logic.

Because I do not think these open methods specific to each storage
mechanism cascades into each other, open-coding the logic to
dispatch into these open() methods in istream_source() itself,
instead of setting the method there and then have the caller call
it, is a perfectly fine simplification, I think.

> @@ -478,19 +477,14 @@ struct odb_read_stream *open_istream(struct repository *r,
>  {
>  	struct odb_read_stream *st = xmalloc(sizeof(*st));
>  	const struct object_id *real = lookup_replace_object(r, oid);
> -	int ret = istream_source(st, r, real, type);
> +	int ret;
>  
> +	ret = istream_source(st, r, real, type);
>  	if (ret) {
>  		free(st);
>  		return NULL;
>  	}

A patch noise?


  reply	other threads:[~2025-11-21 18:08 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
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 [this message]
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=xmqqqztr45t5.fsf@gitster.g \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=jltobler@gmail.com \
    --cc=karthik.188@gmail.com \
    --cc=ps@pks.im \
    /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).