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

Re: [PATCH 2/4] pack v4: add v4_size to struct delta_base_cache_entry

From
Duy Nguyen <pclouds@gmail.com>
Date
Sep 15, 2013, 07:35 UTC
Message-ID
<CACsJy8CrEwt+WiE9_0CU-TqMCJtNgzouc3e=ifQR=5r+GRXUPQ@mail.gmail.com>
In-Reply-To
<alpine.LFD.2.03.1309132351310.20709@syhkavp.arg>
On Sat, Sep 14, 2013 at 11:22 AM, Nicolas Pitre <nico@fluxnic.net> wrote:
Show 24 quoted lines
> The cache is currently updated by the caller.  The caller may ask for a
> copy of 2 entries from a base object, but that base object may itself
> copy those objects from somewhere else in a larger chunk.
>
> Let's consider this example:
>
> tree A
> ------
> 0 (0) copy 2 entries from tree B starting at entry 0
> 1 (2) copy 1 entry from tree B starting at entry 3
>
> tree B
> ------
> 0 (0) copy 6 entries from tree C starting at entry 0
> 1 (6) entry "foo.txt"
> 2 (7) entry "bar.txt"
>
> Right now, the code calls decode_entries() to decode 2 entries from tree
> B but those entries are part of a copy from tree C.  When that call
> returns, the cache is updated as if tree B entry #2 would start at
> offset 1 but this is wrong because offset 0 in tree B covers 6 entries
> and therefore offset 1 is for entry #6.
>
> So this needs a rethink.

I've given it some thought and see no simple/efficient way do it when 2+ depth is involved. Ideally tree A should refer to tree C directly for the first two entries, but in general we can't enforce that a copy sequence must refer to non-copy sequences only. Caching flattened tree B up until the 6th entry may help, but then there's no need to cache offsets anymore because we could just cache tree A.. -- Duy

Previous: Nicolas PitreNext: Nicolas Pitre
Message 7 of 12 in “pack v4: avoid strlen() in tree_entry_prefix”
  1. 1/4 pack v4: avoid strlen() in tree_entry_prefixNguyễn Thái Ngọc Duy, Sep 12, 2013
  2. 2/4 pack v4: add v4_size to struct delta_base_cache_entryNguyễn Thái Ngọc Duy, Sep 12, 2013
  3. Nicolas PitreSep 13, 2013
  4. Duy NguyenSep 13, 2013
  5. Nicolas PitreSep 14, 2013
  6. Nicolas PitreSep 14, 2013
  7. Duy NguyenSep 15, 2013
  8. Nicolas PitreSep 16, 2013
  9. Duy NguyenSep 16, 2013
  10. 3/4 pack v4: cache flattened v4 trees in delta base cacheNguyễn Thái Ngọc Duy, Sep 12, 2013
  11. 4/4 pack v4: make use of cached v4 trees when unpackingNguyễn Thái Ngọc Duy, Sep 12, 2013
  12. 5/4 pack v4: convert v4 tree to canonical format if found in base cacheNguyễn Thái Ngọc Duy, Sep 12, 2013

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.