Couchbase binary protocol changed in Couchabse server 6.x?


#1

It seems that part of the couchbase binary protocol has changed from https://github.com/couchbase/kv_engine/blob/master/docs/BinaryProtocol.md.
Even wireshark can no longer recognize the response from Couchbase server 6.x.
Does server report more information? such as server_us?
Where can I get the document about the new protocol?


#2

Is has changed, to support Response-Time Observability; but in a backwards compatible way (the new features are only used if the client opts into them).

Note that the most recent version of Wireshark should be able to decode it correctly - what version of Wireshark are you using?


#3

Thanks for your reply.
Firstly, after upgrading wireshark from 2.4.2 to 2.6.5, it can decode the response correctly, it’s exciting news to see the Flexible Framing Extras.
Secondly, it seems that there are no options for client to choose. Here is the client side code:


When the client connects to Couchbase 4.x, the old protocol is used,
and when connecting to Couchbase 6.x,the new one is used.
Thirdly, confused with that how to calculate the server recv->send duration precisely with two bytes?


#4

Yes, exactly - this client is new enough to negotiate via the HELLO:Tracing command what encoding to use - if you use an old client you’ll see that 6.x will continue to use the old protocol.

It’s not encoded precisely - it uses a compressed format to minimise the overhead. Small values will have a small error; larger values a larger error. See https://github.com/couchbase/kv_engine/blob/master/docs/BinaryProtocol.md#id0---server-recv-send-duration for details.