[MERGE][RFC] Proposed version 3 of smart server protocol

Andrew Bennetts andrew at canonical.com
Mon Feb 4 23:00:19 GMT 2008


John Arbash Meinel wrote:
> Andrew Bennetts wrote:
>> Hi all,
>> This bundle adds a section to network-protocol.txt describing new version 
>> of the
>> smart protocol.  If you think there's some other change to the protocol 
>> that
>> should be taken into account, now would be a good time to mention it ;)
>> The text should be pretty self-explanatory.  Let me know if it isn't.
>> -Andrew.
>
> If we are going to use bencode, do we want to extend it with a "unicode" 
> type. That way you don't have to worry as much about making sure you drop 
> your Unicode down to utf-8 and then back up again. It would just be a 
> convenience thing but right now:
>
> >>> bzrlib.util.bencode.bencode(u'foo')
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>   File "/usr/lib/python2.5/site-packages/bzrlib/util/bencode.py", line 142, 
> in bencode
>     encode_func[type(x)](x, r)
> KeyError: <type 'unicode'>

Well, right now we just take plain bytes on the wire, so this isn't a step
backwards.  We can certainly add some convenience functions, but I think we
probably want to keep handling byte-strings in many cases, to avoid unnecessary
encoding and decoding to and from UTF-8.

> I don't know that bencoded is really the best format for it. As bencode 
> doesn't give overall lengths. It tells you how many items are in a list,  
> and how long a string is, but it doesn't tell you how many bytes your list 
> is, nor how many bytes your integer will be, etc.
>
> I realize we may have a fix for pipelining anyway, but bencode only gives 
> us lengths for strings. Which seems a bit... minimal. Especially 
> considering every request is going to have at least one "bencoded_sequence" 
> which I assume will be a list.
>
>
> You are making the LENGTH_PREFIXED_BODY start to take: "32-bit unsigned 
> integer in network byte order", so the protocol is no longer human-readable 
> anyway. It seems reasonable to bring that up into the REQUEST_ARGS.

You're right, one thing I meant to add in but forgot was a LENGTH_PREFIX before
each bencoded part, for the length of the bencoded part.  The intention is that
once the protocol version line is read, all variable-length bits of the protocol
will have length-prefixes.

> A small comment as to what you changed in the default css would also be 
> nice.

In the CSS?  I'll do that.  (To satisfy your curiosity immediately, it was for
the “.. note:” section).

> BB:tweak

Thanks!

-Andrew.




More information about the bazaar mailing list