git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 2/2] diff: restrict when prefetching occurs

From
JTJonathan Tan <jonathantanmy@google.com>
Date
Apr 3, 2020, 21:35 UTC
Message-ID
<20200403213546.237273-1-jonathantanmy@google.com>
In-Reply-To
<xmqqsghl1m0p.fsf@gitster.c.googlers.com>
Show 8 quoted lines
> Jonathan Tan <jonathantanmy@google.com> writes:
> 
> > My idea is that this prefetch is a superset of what diffcore_rebase()
> > wants to prefetch, so if we have already done the necessary logic here
> > (even if nothing gets prefetched - which might be the case if we have
> > all objects), we do not need to do it in diffcore_rebase().
> 
> s/rebase/rename/ I presume,
Ah, yes.
Show 32 quoted lines
> but the above reasoning, while it may
> happen to hold true right now, feels brittle.  In other words
> 
>  - how do we know it would stay to be "a superset"?
> 
>  - would it change the picture if we later added a prefetch in
>    diffcore_break(), just like you are doing so to diffcore_rename()
>    in this patch?
> 
> So the revised version of my earlier "wondering" is if it would be
> more future-proof (easier to teach different steps to prefetch for
> their own needs, without having to make an assumption like "what
> this step needs is sufficient for the other step") to arrange the
> codepath from diffcore_std() to its helpers like so:
> 
>     - prepare an empty to_fetch OID array in the caller,
> 
>     - if the output format is one of the ones that wants prefetch,
>       add object names to to_fetch in the caller, but not fetch as
>       long as the caller does not yet need the contents of the
>       blobs.
> 
>     - pass &to_fetch from diffcore_std() to the helper functions in
>       the diffcore family like diffcore_{break,rename}() have them
>       also batch what they (may) want to prefetch in there.  Delay
>       fetching until they actually need to look at the blobs, and
>       when they fetch, clear &to_fetch for the next helper.
> 
>     - diffcore_std() also would need to look at the blob eventually,
>       perhaps after all the helpers it may call returns.  Do the
>       final prefetch if to_fetch is still not empty before it has to
>       look at the blobs.

Ah...that makes sense. Besides the accumulating of prefetch targets (which makes deduplication more necessary - I might make a "sort_and_uniq" function on oid_array that updates the oid_array in-place), looking at the code, it's not only diffcore_break() which might need prefetching, but diffcore_skip_stat_unmatch() too (not to speak of the functions that come after diffcore_rename()). The least brittle way is probably to have diff_populate_filespec() do the prefetching. I'll take a further look.

Previous: Junio C HamanoNext: Junio C Hamano
Message 16 of 26 in “diff: restrict when prefetching occurs”
  1. diff: restrict when prefetching occursJonathan Tan, Mar 31, 2020
  2. Derrick StoleeMar 31, 2020
  3. Jonathan TanMar 31, 2020
  4. Derrick StoleeMar 31, 2020
  5. Junio C HamanoMar 31, 2020
  6. Junio C HamanoMar 31, 2020
  7. 0/2 Restrict when prefetcing occursJonathan Tan, Apr 2, 2020
  8. 1/2 promisor-remote: accept 0 as oid_nr in functionJonathan Tan, Apr 2, 2020
  9. Junio C HamanoApr 2, 2020
  10. Jonathan TanApr 2, 2020
  11. 2/2 diff: restrict when prefetching occursJonathan Tan, Apr 2, 2020
  12. Junio C HamanoApr 2, 2020
  13. Jonathan TanApr 2, 2020
  14. Junio C HamanoApr 2, 2020
  15. Junio C HamanoApr 2, 2020
  16. Jonathan TanApr 3, 2020
  17. Junio C HamanoApr 3, 2020
  18. Junio C HamanoApr 2, 2020
  19. Derrick StoleeApr 6, 2020
  20. Garima SinghApr 6, 2020
  21. 0/4 Restrict when prefetcing occursJonathan Tan, Apr 7, 2020
  22. 1/4 promisor-remote: accept 0 as oid_nr in functionJonathan Tan, Apr 7, 2020
  23. 2/4 diff: make diff_populate_filespec_options structJonathan Tan, Apr 7, 2020
  24. Junio C HamanoApr 7, 2020
  25. 3/4 diff: refactor object readJonathan Tan, Apr 7, 2020
  26. 4/4 diff: restrict when prefetching occursJonathan Tan, Apr 7, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.