[CHK/MERGE/RFC] Updates to fetch and node layout

John Arbash Meinel john at arbash-meinel.com
Sun Nov 16 20:40:31 GMT 2008


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

And, of course, it is always better when you attach things :)

John Arbash Meinel wrote:
> I found a couple problems with inserting nodes into a CHK map. It turned
> out that you could end up with invalid InternalNodes. Specifically, if
> you had 1 key per leaf and got the keys:
> 
> aaa
> aab
> 
> This would be properly:
>   InternalNode aa?
>     Leaf aaa
>     Leaf aab
> 
> However, if you then inserted 'bbb', it would end up
> 
>   InternalNode aa?
>    Leaf aaa
>    Leaf aab
>    Leaf bbb
> 
> Rather than
> 
>  InternalNode ?
>   InternalNode aa?
>     Leaf aaa
>     Leaf aab
>   Leaf bbb
> 
> There are some other bits
> 
> 1) Reintroduce copy_to, it is actually invalid as is, because I didn't
> get the nested pages done. It isn't meant as the final answer for
> fetching (that is the 'iter_*' interface you can see started.) I think
> something like it is still useful for 'CHKInventory.from_inventory()' as
> the existing code iterates all paths and uses 'apply_delta', which is
> always O(tree). If we don't want chatter, we can keep the O(tree)
> performance and always copy all referenced (instead of only missing)
> pages, but that way it uses the serialized pages, rather than
> deserializing and re-creating the key.
> 
> I don't mind being chatty when the function is
> "CHKInventory.from_inventory()", I do plan on finishing the work for a
> better fetch function.
> 
> 2) CHKMap._dump_tree() was mostly meant as a helper, since trying to
> debug sha1 hashes is awful (is this for 'aaa' or 'aab'?) However, I
> think it can also be useful in testing, as it lets you assert the layout
> of the tree. I would consider updating it to allow a "include_key=False"
> to hide the sha hashes making it resilient to final serialization, while
> still giving the tree shape.
> 
> 
> I can split some of this stuff out if we decide not to merge it. I just
> put it together out-of-order while on the plane. The most important bit
> is getting the InternalNode.map() to be correct, as otherwise we
> generate invalid CHKMaps. I mostly wanted to get it out there before
> someone else found the problem and had to spend the time fixing what
> I've fixed.
> 
> John
> =:->
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkkghT4ACgkQJdeBCYSNAAPwUgCfUZVYHgXH/BMwrUGgrx4AOC4R
jSMAn2lKh/oB0lwAerfEvx3xOEiH/8Gk
=odBf
-----END PGP SIGNATURE-----
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: chk-fetch.patch
Url: https://lists.ubuntu.com/archives/bazaar/attachments/20081116/d9fc22e6/attachment-0001.diff 


More information about the bazaar mailing list