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

Re: [PATCH v2 03/22] t3305: annotate with SHA1 prerequisite

From
Johan Herland <johan@herland.net>
Date
Jan 26, 2020, 18:18 UTC
Message-ID
<CALKQrgcF0KK1gEvyKe3th2w0YJBbmv+grgbCeN4fOzHKo=H1UA@mail.gmail.com>
In-Reply-To
<nycvar.QRO.7.76.6.2001261209590.46@tvgsbejvaqbjf.bet>

On Sun, Jan 26, 2020 at 12:16 PM Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:

Show 11 quoted lines
> On Sat, 25 Jan 2020, brian m. carlson wrote:
> > This test relies on a roughly equal distribution of hashes for notes in
> > order to ensure that fanouts are compressed.  If there are subtrees with
> > only one item left after removing notes, they'll end up still with one
> > level of fanout, causing the test to fail.
>
> That is _almost_ correct: The heuristic wants to see one bucket that has
> a note in it. Or something like that.
>
> See 73f77b909f8 (Notes API: for_each_note(): Traverse the entire notes
> tree with a callback, 2010-02-13) for details. (Cc:ing Johan.)

Something like that, yeah... Re-reading this code, I believe we stop the fanout at the current level when we can find one or more notes that do not share the high-nibble of their path with another note.

Here we're at the top level, so this corresponds to looking at the very first hex character (0-9a-f) of the path (oid of annotated object), and if there are at least two such objects for each hex character, we will use a fanout of 1, otherwise, we collapse the fanout to 0.

Hence we need an absolute minimum of 32 notes (and some rotten luck) to get a fanout of 1. As the number of notes increase, the probably of fanning out increases, passing 50% at ~79 notes, and reaching ~100% somewhere north of 150 notes.

Show 7 quoted lines
> > The test happens to pass with SHA-1, but doesn't necessarily with other
> > hash algorithms, so annotate it with the SHA1 prerequisite.
>
> I would rather see this tested, still, and reducing the number of notes
> that are retained from 50 to 20 before testing that the fanout has been
> reduced to 0 seems to do the trick. Therefore, I would love to submit this
> for squashing:

Yes, it seems that for SHA1 and the (deterministic) objects used in the test, we got away with 50 notes, but that is not the case for other hash algorithms. Lowering the number to 20 definitely results a fanout of 0, as should any other number below 32.

+1 to Dscho's squash.
...Johan
-- 
Johan Herland, <johan@herland.net>
www.herland.net
Previous: Johannes SchindelinNext: Johannes Schindelin
Message 6 of 52 in “SHA-256 test fixes, part 8”
  1. 00/23 SHA-256 test fixes, part 8brian m. carlson, Jan 25, 2020
  2. 01/22 t/lib-pack: support SHA-256brian m. carlson, Jan 25, 2020
  3. 07/22 t3311: make test work with SHA-256brian m. carlson, Jan 25, 2020
  4. 03/22 t3305: annotate with SHA1 prerequisitebrian m. carlson, Jan 25, 2020
  5. Johannes SchindelinJan 26, 2020
  6. Johan HerlandJan 26, 2020
  7. Johannes SchindelinJan 26, 2020
  8. brian m. carlsonJan 26, 2020
  9. Johan HerlandJan 26, 2020
  10. Johannes SchindelinJan 27, 2020
  11. brian m. carlsonJan 26, 2020
  12. 08/22 t4013: make test hash independentbrian m. carlson, Jan 25, 2020
  13. Johannes SchindelinJan 26, 2020
  14. brian m. carlsonJan 26, 2020
  15. 04/22 t3308: make test work with SHA-256brian m. carlson, Jan 25, 2020
  16. 05/22 t3309: make test work with SHA-256brian m. carlson, Jan 25, 2020
  17. 09/22 t4060: make test work with SHA-256brian m. carlson, Jan 25, 2020
  18. 10/22 t4211: make test hash independentbrian m. carlson, Jan 25, 2020
  19. Johannes SchindelinJan 26, 2020
  20. 17/23 t5616: use correct filter syntaxbrian m. carlson, Jan 25, 2020
  21. Junio C HamanoJan 28, 2020
  22. brian m. carlsonJan 29, 2020
  23. 18/23 t5607: make hash size independentbrian m. carlson, Jan 25, 2020
  24. 14/22 t5321: make test hash independentbrian m. carlson, Jan 25, 2020
  25. 17/22 t5607: make hash size independentbrian m. carlson, Jan 25, 2020
  26. 19/22 t5703: switch tests to use test_oidbrian m. carlson, Jan 25, 2020
  27. 18/22 t5703: make test work with SHA-256brian m. carlson, Jan 25, 2020
  28. Junio C HamanoJan 28, 2020
  29. brian m. carlsonJan 29, 2020
  30. 21/23 t6000: abstract away SHA-1-specific constantsbrian m. carlson, Jan 25, 2020
  31. 21/22 t6006: make hash size independentbrian m. carlson, Jan 25, 2020
  32. 20/22 t6000: abstract away SHA-1-specific constantsbrian m. carlson, Jan 25, 2020
  33. 06/22 t3310: make test work with SHA-256brian m. carlson, Jan 25, 2020
  34. 22/23 t6006: make hash size independentbrian m. carlson, Jan 25, 2020
  35. 23/23 t6024: update for SHA-256brian m. carlson, Jan 25, 2020
  36. 02/22 t3206: make hash size independentbrian m. carlson, Jan 25, 2020
  37. 22/22 t6024: update for SHA-256brian m. carlson, Jan 25, 2020
  38. 20/23 t5703: switch tests to use test_oidbrian m. carlson, Jan 25, 2020
  39. 19/23 t5703: make test work with SHA-256brian m. carlson, Jan 25, 2020
  40. 15/22 t5515: make test hash independentbrian m. carlson, Jan 25, 2020
  41. Junio C HamanoJan 28, 2020
  42. brian m. carlsonJan 29, 2020
  43. 16/22 t5318: update for SHA-256brian m. carlson, Jan 25, 2020
  44. 13/22 t5313: make test hash independentbrian m. carlson, Jan 25, 2020
  45. Junio C HamanoJan 28, 2020
  46. 11/22 t5302: make hash size independentbrian m. carlson, Jan 25, 2020
  47. Johannes SchindelinJan 26, 2020
  48. brian m. carlsonJan 26, 2020
  49. 12/22 t5309: make test hash independentbrian m. carlson, Jan 25, 2020
  50. Johannes SchindelinJan 26, 2020
  51. brian m. carlsonJan 26, 2020
  52. Johannes SchindelinJan 26, 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.