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

Re: Submodule object store

From
Martin Waitz <tali@admingilde.org>
Date
Mar 27, 2007, 15:25 UTC
Message-ID
<20070327152507.GO22773@admingilde.org>
In-Reply-To
<Pine.LNX.4.63.0703261530030.14387@qynat.qvtvafvgr.pbz>
hoi :)

Its really funny that when I proposed one big object database everybody wanted it separated and now that I propose a separate database everybody wants it as one combined database. I read this as a sign that people really try to think critically about the design, which is a good thing and will hopefully lead to a good and stable submodule implementation.

On Mon, Mar 26, 2007 at 03:40:15PM -0800, David Lang wrote:
> useing the same object store makes this work automaticaly (think of all the 
> copies of COPYING that would end up being the same as a trivial example)

Yes, but I guess not much more than COPYING, INSTALL, some trivial Makefiles and empty files will be shared between subprojects. Except when you have the same subproject in your tree multiple times, of course.

Yet this sharing is exactly why I started to do it that way, until Linus stopped me.

> >If someone comes up with a nice way to handle everything in one big
> >object store I would happily use that! :-)
> 
> what exactly are the problems with one big object store?

I think we really have to discuss this separation on several layers: traversal, pack-files, and object database.

For the traversal the point of separating it into a per-module traversal is that only one module has to be loaded into RAM at a time. This effects all operations which do a (potentially) recursive traversal: push, pull, fsck, prune, repack. However a separated traversal will no longer be garanteed to only list an object once, so this has to be handled in some way.

Pack files should have better access patterns if they are per-module. Most of the time you are only interested in one individual module and locality is important here.

Separating the entire object database is a way to improve unreachability analysis, as it now can be done per module. The other two separations are easier to implement with a separated object database, but that's not too strong an argument.

So if we can come up with a nice way to do unreachability analysis we can indeed go on with the shared object database and tackle the remaining scalability issues as they arise. Those could then be added later without changing the on-disk format.

Show 7 quoted lines
> ones that I can think of:
> 
> 1. when you are doing a fsck you need to walk all the trees and find out 
> the list of objects that you know about.
> 
>   done as a tree of binary values you can hold a LOT in memory before 
>   running into swap.
Could you explain the algorithm you are thinking about in more detail?
>   if it's enough larger then available ram then an option for fsck to use 
>   trees on disk is an option.

This could simplify some things. There could be an on-disk index of all known objects, so that the sha1 sums do not have to loaded into RAM all at once.

-- 
Martin Waitz
Previous: David LangNext: David Lang
Message 25 of 61 in “.gitlink for Summer of Code”
  1. Eric LeshMar 25, 2007
  2. Matthieu MoyMar 25, 2007
  3. Shawn O. PearceMar 25, 2007
  4. Johannes SchindelinMar 25, 2007
  5. Shawn O. PearceMar 25, 2007
  6. Junio C HamanoMar 25, 2007
  7. Shawn O. PearceMar 25, 2007
  8. Petr BaudisMar 27, 2007
  9. Eric LeshMar 26, 2007
  10. Matthieu MoyMar 26, 2007
  11. Eric LeshMar 26, 2007
  12. Martin WaitzMar 26, 2007
  13. Josef WeidendorferMar 26, 2007
  14. Matthieu MoyMar 26, 2007
  15. Josef WeidendorferMar 26, 2007
  16. Matthieu MoyMar 27, 2007
  17. Martin WaitzMar 26, 2007
  18. Junio C HamanoMar 26, 2007
  19. Submodule object storeMartin Waitz, Mar 26, 2007
  20. Junio C HamanoMar 26, 2007
  21. Martin WaitzMar 26, 2007
  22. David LangMar 26, 2007
  23. Martin WaitzMar 26, 2007
  24. David LangMar 26, 2007
  25. Martin WaitzMar 27, 2007
  26. David LangMar 27, 2007
  27. Junio C HamanoMar 27, 2007
  28. Martin WaitzMar 27, 2007
  29. Uwe Kleine-KönigMar 27, 2007
  30. Uwe Kleine-KönigMar 27, 2007
  31. Martin WaitzMar 27, 2007
  32. Josef WeidendorferMar 27, 2007
  33. Martin WaitzMar 27, 2007
  34. Uwe Kleine-KönigMar 27, 2007
  35. Linus TorvaldsMar 27, 2007
  36. Uwe Kleine-KönigMar 27, 2007
  37. Linus TorvaldsMar 27, 2007
  38. Linus TorvaldsMar 27, 2007
  39. Martin WaitzMar 27, 2007
  40. Josef WeidendorferMar 26, 2007
  41. Junio C HamanoMar 26, 2007
  42. Linus TorvaldsMar 27, 2007
  43. David LangMar 27, 2007
  44. Linus TorvaldsMar 27, 2007
  45. Martin WaitzMar 27, 2007
  46. Daniel BarkalowMar 27, 2007
  47. Linus TorvaldsMar 27, 2007
  48. Daniel BarkalowMar 27, 2007
  49. Linus TorvaldsMar 27, 2007
  50. David LangMar 27, 2007
  51. Jakub NarebskiMar 27, 2007
  52. David LangMar 27, 2007
  53. Steven GrimmMar 27, 2007
  54. Daniel BarkalowMar 27, 2007
  55. Linus TorvaldsMar 27, 2007
  56. Josef WeidendorferMar 26, 2007
  57. Martin WaitzMar 26, 2007
  58. Jakub NarebskiMar 26, 2007
  59. Matthieu MoyMar 26, 2007
  60. Jakub NarebskiMar 27, 2007
  61. Shawn O. PearceMar 25, 2007

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.