From: Junio C Hamano <gitster@pobox.com> To: Jonathan Tan <jonathantanmy@google.com> Cc: git@vger.kernel.org, peff@peff.net Subject: Re: [RFC PATCH 2/7] fetch-pack: allow NULL negotiator->known_common Date: Wed, 05 Aug 2020 13:08:07 -0700 [thread overview] Message-ID: <xmqqk0yconyw.fsf@gitster.c.googlers.com> (raw) In-Reply-To: <401227c2220b6b45d80e21b52e29b6821ca139f9.1596590295.git.jonathantanmy@google.com> (Jonathan Tan's message of "Tue, 4 Aug 2020 18:20:45 -0700") Jonathan Tan <jonathantanmy@google.com> writes: > In a subsequent patch, a null fetch negotiator will be introduced. This > negotiator, among other things, will not need any information about > common objects and will have a NULL known_common. Teach fetch-pack to > allow this. Hmph, both the default and the skipping negotiator seem to put NULL in known_common and add_tip when its next() method is called. Also they clear known_common to NULL after add_tip is called even once. So, how have we survived so far without this patch to "allow this (i.e. known_common method to be NULL)"? Is there something that makes sure a negotiator never gets called from this function after its .next or .add_tip method is called? Puzzled. Or is this merely an optimization? If so, it's not like the change "allows this", but it starts to take advantage of it in some way. ... goes and looks at mark_complete_and_common_ref() The function seems to have an unconditional call to ->known_common(), so anybody passing a negotiator whose known_common is NULL would already be segfaulting, so this does not appear to be an optimization but necessary to keep the code from crashing. I cannot quite tell if it is avoiding unnecessary work, or sweeping crashes under the rug, though. Is the untold assumption that mark_complete_and_common_ref() will never be called after either mark_tips() or find_common() have been called? Thanks. > [NEEDSWORK] > Optimizing out the ref iteration also affects the execution > of everything_local(), which relies on COMPLETE being set. (Having said > that, the typical use case - lazy fetching - would be fine with > everything_local() always returning that not everything is local.) > > This optimization is needed so that in the future, fetch_pack() can be > used to lazily fetch in a partial clone (without the no_dependents > flag). This means that fetch_pack() needs a way to execute without > relying on any targets of refs being present, and thus it cannot use the > ref iterator (because it checks and lazy-fetches any missing targets). > (Git currently does not have this problem because we use the > no_dependents flag, but lazy-fetching will in a subsequent patch be > changed to use the user-facing fetch command, which does not use this > flag.) > [/NEEDSWORK] > > Signed-off-by: Jonathan Tan <jonathantanmy@google.com> > --- > fetch-pack.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/fetch-pack.c b/fetch-pack.c > index 6c786f5970..5f5474dbed 100644 > --- a/fetch-pack.c > +++ b/fetch-pack.c > @@ -677,6 +677,9 @@ static void mark_complete_and_common_ref(struct fetch_negotiator *negotiator, > int old_save_commit_buffer = save_commit_buffer; > timestamp_t cutoff = 0; > > + if (!negotiator->known_common) > + return; > + > save_commit_buffer = 0; > > trace2_region_enter("fetch-pack", "parse_remote_refs_and_find_cutoff", NULL);
next prev parent reply other threads:[~2020-08-05 20:08 UTC|newest] Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-07-24 22:38 [RFC PATCH] Modify fetch-pack to no longer die on error? Jonathan Tan 2020-07-24 23:07 ` Junio C Hamano 2020-07-24 23:11 ` Junio C Hamano 2020-07-25 21:41 ` Jeff King 2020-07-25 23:01 ` Junio C Hamano 2020-07-27 17:11 ` Jeff King 2020-07-28 19:23 ` Jonathan Tan 2020-07-28 20:08 ` Jeff King 2020-07-29 18:53 ` Jonathan Tan 2020-07-29 19:29 ` Jeff King 2020-07-29 19:02 ` Junio C Hamano 2020-07-29 22:55 ` Jonathan Tan 2020-08-05 1:20 ` [RFC PATCH 0/7] Lazy fetch with subprocess Jonathan Tan 2020-08-05 1:20 ` [RFC PATCH 1/7] fetch-pack: allow NULL negotiator->add_tip Jonathan Tan 2020-08-05 19:53 ` Junio C Hamano 2020-08-07 20:53 ` Jonathan Tan 2020-08-05 1:20 ` [RFC PATCH 2/7] fetch-pack: allow NULL negotiator->known_common Jonathan Tan 2020-08-05 20:08 ` Junio C Hamano [this message] 2020-08-05 22:11 ` Junio C Hamano 2020-08-07 20:59 ` Jonathan Tan 2020-08-05 1:20 ` [RFC PATCH 3/7] negotiator/null: add null fetch negotiator Jonathan Tan 2020-08-05 1:20 ` [RFC PATCH 4/7] fetch: --stdin Jonathan Tan 2020-08-05 20:33 ` Junio C Hamano 2020-08-07 21:10 ` Jonathan Tan 2020-08-07 21:58 ` Junio C Hamano 2020-08-07 21:10 ` Jonathan Tan 2020-08-05 1:20 ` [RFC PATCH 5/7] fetch: submodule config Jonathan Tan 2020-08-05 1:20 ` [RFC PATCH 6/7] fetch: only populate existing_refs if needed Jonathan Tan 2020-08-05 1:20 ` [RFC PATCH 7/7] promisor-remote: use subprocess to fetch Jonathan Tan 2020-08-11 22:52 ` [PATCH v2 0/7] Lazy fetch with subprocess Jonathan Tan 2020-08-11 22:52 ` [PATCH v2 1/7] negotiator/null: add null fetch negotiator Jonathan Tan 2020-08-12 12:55 ` Derrick Stolee 2020-08-12 16:44 ` Junio C Hamano 2020-08-12 17:29 ` Jonathan Tan 2020-08-11 22:52 ` [PATCH v2 2/7] fetch: allow refspecs specified through stdin Jonathan Tan 2020-08-11 22:52 ` [PATCH v2 3/7] fetch: avoid reading submodule config until needed Jonathan Tan 2020-08-12 17:34 ` Junio C Hamano 2020-08-11 22:52 ` [PATCH v2 4/7] fetch: only populate existing_refs if needed Jonathan Tan 2020-08-12 18:06 ` Junio C Hamano 2020-08-11 22:52 ` [PATCH v2 5/7] fetch-pack: do not lazy-fetch during ref iteration Jonathan Tan 2020-08-12 18:25 ` Junio C Hamano 2020-08-11 22:52 ` [PATCH v2 6/7] promisor-remote: lazy-fetch objects in subprocess Jonathan Tan 2020-08-12 18:28 ` Junio C Hamano 2020-08-11 22:52 ` [PATCH v2 7/7] fetch-pack: remove no_dependents code Jonathan Tan 2020-08-12 12:51 ` [PATCH v2 0/7] Lazy fetch with subprocess Derrick Stolee 2020-08-18 4:01 ` [PATCH v3 " Jonathan Tan 2020-08-18 4:01 ` [PATCH v3 1/7] negotiator/noop: add noop fetch negotiator Jonathan Tan 2020-08-18 4:01 ` [PATCH v3 2/7] fetch: allow refspecs specified through stdin Jonathan Tan 2020-08-18 4:01 ` [PATCH v3 3/7] fetch: avoid reading submodule config until needed Jonathan Tan 2020-08-18 4:01 ` [PATCH v3 4/7] fetch: only populate existing_refs if needed Jonathan Tan 2020-08-18 4:01 ` [PATCH v3 5/7] fetch-pack: do not lazy-fetch during ref iteration Jonathan Tan 2020-08-18 4:01 ` [PATCH v3 6/7] promisor-remote: lazy-fetch objects in subprocess Jonathan Tan 2020-08-18 4:01 ` [PATCH v3 7/7] fetch-pack: remove no_dependents code Jonathan Tan 2020-08-18 19:56 ` [PATCH v3 0/7] Lazy fetch with subprocess Junio C Hamano 2020-08-18 22:32 ` Junio C Hamano 2020-08-18 23:36 ` [PATCH] fixup! promisor-remote: lazy-fetch objects in subprocess Jonathan Tan 2020-08-18 23:57 ` Junio C Hamano
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 List information: http://vger.kernel.org/majordomo-info.html * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=xmqqk0yconyw.fsf@gitster.c.googlers.com \ --to=gitster@pobox.com \ --cc=git@vger.kernel.org \ --cc=jonathantanmy@google.com \ --cc=peff@peff.net \ --subject='Re: [RFC PATCH 2/7] fetch-pack: allow NULL negotiator->known_common' \ /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
Code repositories for project(s) associated with this inbox: https://80x24.org/mirrors/git.git 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 read-only IMAP folder(s) and NNTP newsgroup(s).