[ 
https://issues.apache.org/jira/browse/CASSANDRA-1015?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12933178#action_12933178
 ] 

Gary Dusbabek commented on CASSANDRA-1015:
------------------------------------------

I've thought about this and done a bit of hacking (had 0.7 mostly on speaking 
terms with 0.6).  Here is how I think we ought to proceed:

Version N should be able to translate messages to and from N-1 in the N-1 
format.  N-1 should be oblivious to the fact that it's speaking to a newer 
node.  

This gets tricky because in some cases we take a message and send it to several 
nodes.  We'll have to transcode that message in-place for older nodes.  This 
will degrade performance somewhat, but we need to recognize that this is a 
temporary state for the cluster.

As long as there is a facility to transcode any message between N and N-1, 
we'll be set.  This means changing the CompactSerializer API to respect a 
version identifier (probably a boolean to indicate oldVersion), which touches 
quite a bit of code.

The version in the message header will start to mean something and will get 
upgraded for every major version and stuffed into the message itself.  This 
will enable N to detect a N-1 message.

We'll need a test suite that contains pre-serialized messages from the N-1 
version to verify that the current version is the same or that we can properly 
translate from that version.

I'm pretty sure I can have this done in about a week, but I don't want to start 
until trunk==0.8.

> Internal Messaging should be backwards compatible
> -------------------------------------------------
>
>                 Key: CASSANDRA-1015
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-1015
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: Core
>            Reporter: Ryan King
>            Assignee: Gary Dusbabek
>            Priority: Critical
>             Fix For: 0.8
>
>
> Currently, incompatible changes in the node-to-node communication prevent 
> rolling restarts of clusters.
> In order to fix this we should:
> 1) use a framework that makes doing compatible changes easy
> 2) have a policy of only making compatible changes between versions n and n+1*
> * Running multiple versions should only be supported for small periods of 
> time. Running clusters of mixed version is not needed here.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to