On Sat, 2009-08-29 at 16:37 +0200, Ludovic Brenta wrote: > Timothy Brownawell <tbrow...@prjek.net> writes: > > On Tue, 2009-08-25 at 20:24 -0500, Timothy Brownawell wrote: > >> I'm now thinking we can make the about-to-be-released clients work with > >> current-version servers. If they see an earlier-version hello from the > >> server, they just need to store that in the session and use it for all > >> packets sent. The only actual difference would be the cert data packets, > >> and which hashes to use during cert refinement (would have to store both > >> old and new hashes in the db). > >> > >> I'll see if I can code this up later this week or this weekend. > >> > >> In the future, the server would also have to recognize earlier versions > >> in the auth/anonymous packets and adjust itself accordingly (easy, since > >> server/client use almost exactly the same code). > > > > This is done. New-version servers can also talk to old-version clients, > > they now start with usher_cmd (which the client ignores the version of) > > instead of start_cmd. > > > > So we now have full protocol version negotiation between 0.44 (and > > earlier) and 0.45dev (and future). > > Wow, I'm really impressed. The monotone community is really amazing and > I'm proud to be part of it (as the sponsor of the package in Debian and > as a strong supporter, not as a developer). > > However I'd like to better understand how old and new monotones are > compatible (or incompatible) WRT the new key hashes. Could you explain > what happens when: > > - a new client sends certs to an old server? > - an old client (belonging to another developer) gets those certs from > the server > ? > > i.e. how does the old monotone see the certs and how does it interpret > them? If there are any user-visible effects, I think they should be in > the user's manual.
For certs signed by key f...@bar.com (abcd...): * If there is only one key with that name, there are no user-visible effects. * If there is also a key f...@bar.com (1234...): * If the new-version peer has both keys, there is no user-visible effect when it receives certs. * If the old-version peer only has 1234... and the new-version peer doesn't have abcd..., then the new-version peer will drop the incoming certs (because the old peer can't send it the correct key, so it can't correctly identify the key hash to attach the certs to) and print a warning. * When the old-version peer receives certs signed by the key it doesn't have, the new-version peer will try to send that key and the old-version peer will drop the connection with "received duplicate key". Hmm. If you migrate a database containing key f...@bar.com (1234...) and certs signed by key f...@bar.com (abcd...), the upgrade logic will attach them to that (wrong) key because it assumes your db is consistent. So we need a command that will try to reassign any invalid certs to the correct key, and maybe optionally delete them if it doesn't have that key (so you'll be able to get a good copy, with the key, during your next pull). We probably also want to drop certs with bad signatures (ie, attached to the wrong key) during netsync, so they don't spread. > > ...do we want to call it 1.0 due to caring about compatibility now? > > *ducks* > > If the compatibility is good, there is no need for a major version > number bump and no need for you to duck. On the contrary you should > stand proudly and let everyone else bow in reverence :) > -- Timothy Free public monotone hosting: http://mtn-host.prjek.net _______________________________________________ Monotone-devel mailing list Monotone-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/monotone-devel