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

Re: Mozilla .git tree

From
Shawn Pearce <spearce@spearce.org>
Date
Sep 2, 2006, 02:04 UTC
Message-ID
<20060902020426.GF24234@spearce.org>
In-Reply-To
<7vr6yw58xp.fsf@assigned-by-dhcp.cox.net>

Junio C Hamano <junkio@cox.net> wrote: [snip]

> +A new style .idx file begins with a signature, "\377tOc", and a
> +version number as a 4-byte network byte order integer.  The version
> +of this implementation is 2.

Ick. I understand why you did this (and thanks for such a good explanation of it by the way) but what a horrible signature number and way to wedge in a version number.

>From now on I propose that if we write a file - especially a binary

file - to disk that we always include a 4 byte version number into the header of the file. Then we can avoid trying to wedge this into the file after the fact when some worthwhile improvement requires changing the format.

I think we probably should have done this when the binary headers were introduced into loose objects. Would 4 bytes of file format version number with an (initial version number which wasn't 0x78 in byte 0 and failed the % 31 test) really have hurt that much in a loose object?

[snip]
> + . 4-byte network byte order integer, recording the location of the
> +   next object in the main toc table.

Why not just the 4 byte object entry length? To load an object we have to go find the next object in the idx file so we can compute the offset difference. On very large packs (e.g. the Mozilla pack) the index is 46 MiB. The jump across the index could be the entire thing from back to front just to compute the size of an object when the fan-out table and the binary search process really only poked the tail end of the index when searching for the entry. So we're demand paging in the front of the index just to compute a length

Sure the scheme you outlined allows a 64 bit difference but uncompressed objects already can't be larger than 2**32-1 and we could just as easily move that limit down to say 2**32-16 to leave room for the object header and zlib header.

-- 
Shawn.

-- 
VGER BF report: U 0.5
Previous: Shawn PearceNext: Junio C Hamano
Message 18 of 52 in “Re: Mozilla .git tree”
  1. Shawn PearceAug 30, 2006
  2. Shawn PearceAug 30, 2006
  3. Jon SmirlAug 30, 2006
  4. Shawn PearceAug 30, 2006
  5. Jon SmirlAug 30, 2006
  6. Nicolas PitreAug 30, 2006
  7. Junio C HamanoAug 30, 2006
  8. Junio C HamanoSep 1, 2006
  9. Shawn PearceSep 2, 2006
  10. Junio C HamanoSep 2, 2006
  11. Shawn PearceSep 2, 2006
  12. Junio C HamanoSep 2, 2006
  13. Jon SmirlSep 2, 2006
  14. Shawn PearceSep 2, 2006
  15. Linus TorvaldsSep 2, 2006
  16. Junio C HamanoSep 2, 2006
  17. Shawn PearceSep 2, 2006
  18. Shawn PearceSep 2, 2006
  19. Junio C HamanoSep 2, 2006
  20. Shawn PearceSep 2, 2006
  21. Junio C HamanoSep 2, 2006
  22. Shawn PearceSep 3, 2006
  23. A Large Angry SCMSep 1, 2006
  24. Linus TorvaldsSep 1, 2006
  25. Junio C HamanoSep 1, 2006
  26. pack-objects: re-validate data we copy from elsewhere.Junio C Hamano, Sep 1, 2006
  27. Linus TorvaldsSep 2, 2006
  28. VGER BF report?Johannes Schindelin, Sep 2, 2006
  29. Sam RavnborgSep 2, 2006
  30. Junio C HamanoSep 2, 2006
  31. Junio C HamanoSep 2, 2006
  32. Shawn PearceSep 2, 2006
  33. Junio C HamanoSep 2, 2006
  34. Linus TorvaldsSep 2, 2006
  35. Junio C HamanoSep 2, 2006
  36. Shawn PearceSep 2, 2006
  37. Junio C HamanoSep 3, 2006
  38. Shawn PearceSep 4, 2006
  39. Junio C HamanoSep 4, 2006
  40. Shawn PearceSep 4, 2006
  41. Junio C HamanoSep 4, 2006
  42. Linus TorvaldsSep 3, 2006
  43. Junio C HamanoSep 3, 2006
  44. Junio C HamanoSep 5, 2006
  45. Linus TorvaldsSep 2, 2006
  46. Junio C HamanoSep 2, 2006
  47. Junio C HamanoSep 3, 2006
  48. Linus TorvaldsSep 3, 2006
  49. Linus TorvaldsSep 3, 2006
  50. Junio C HamanoSep 3, 2006
  51. Junio C HamanoSep 4, 2006
  52. Linus TorvaldsSep 4, 2006

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.