[ https://issues.apache.org/jira/browse/CASSANDRA-2478?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13408275#comment-13408275 ]
paul cannon commented on CASSANDRA-2478: ---------------------------------------- bq. First, I think that for dealing with cross-version compatibility, having one single version number is much easier than splitting it in 2 different versions. All you care about is 'can I have a discussion with that server', and there is no point in adding complexity by having to check 2 numbers (this would also complicate documentation typically), so I'm fairly strongly against that idea. It doesn't need to add much complexity; it's just a separation of layers, both of which would be more simple afterward. Any good implementation of this protocol will already be handling the framing at a different level than the messaging. But if you're that much against it, that's fine, I'd be ok with just a single, wider version space. bq. Now there is the question of whether we'll have enough version number with the current format. First, I certainly hope so. I think that the protocol should be something as stable as we possibly can, and I honestly don't think things in the protocol will change all the time. There is really so many thing that a protocol can do and so many things we can add. I wholeheartedly agree we want the protocol to be as stable as possible, while still evolving toward additional needs (I'm very much with the other commenters suggesting that async messaging will be important soon, and also challenge/response auth). I also hope that we won't need more than a few dozen revisions total. But I find it unlikely; the very nature of network protocols is that the more specific in intention they are, the more they will need to grow over time. Another consideration is letting servers and clients know, if their protocol versions differ, whether they're still compatible with each other. This is vital information to haveāit *will* be necessary in practical situations for clients to speak with multiple server versions and for servers to speak with multiple client versions. Think rolling upgrades or multiple client libs in use simultaneously. Finally, what's the rationale for *not* having a three-part semantic version for the protocol? It's an extra *two bytes* used per connection. There's practically no downside, and a massive potential upside. bq. I prefer not designing the first version of the protocol assuming we will fail at that. It's not an assumption that we will fail; it's (a) a signal to clients of compatibility and (b) an acknowledgement of a possibly-remote chance of failure; a safety net. It's just like having exception handlers around complex code, even if you don't expect to need them. It's just good design. > Custom CQL protocol/transport > ----------------------------- > > Key: CASSANDRA-2478 > URL: https://issues.apache.org/jira/browse/CASSANDRA-2478 > Project: Cassandra > Issue Type: New Feature > Components: API, Core > Reporter: Eric Evans > Assignee: Sylvain Lebresne > Priority: Minor > Labels: cql > Fix For: 1.2 > > Attachments: cql_binary_protocol, cql_binary_protocol-v2 > > > A custom wire protocol would give us the flexibility to optimize for our > specific use-cases, and eliminate a troublesome dependency (I'm referring to > Thrift, but none of the others would be significantly better). Additionally, > RPC is bad fit here, and we'd do better to move in the direction of something > that natively supports streaming. > I don't think this is as daunting as it might seem initially. Utilizing an > existing server framework like Netty, combined with some copy-and-paste of > bits from other FLOSS projects would probably get us 80% of the way there. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira