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

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

I've swung back around to preferring that we use our own messages and 
serialization for this.  Adopting a framework like thrift or avro would save us 
from the tedium of writing our own serialization methods, but would also take 
away control over the serialization, which I don't think we want.

Here are a few examples of how I expect messages to change from version to 
version:
1. a field is added.  every framework handles this fine.
2. a field is removed.  every framework handles this fine.
3. a field type is changed (name stays the same).  every framework handles this 
different.  Thrift requires that we rename the field, which is the same as 
removing and then adding a field.  We'd need to have translation routines to 
convert from the old field to the new one.  Avro handles this a little bit 
better using a union.  But then the avro object type becomes a union which 
would require ugly casting in our code.  Using our own serialization would 
solve this problem at serialization/deserialization time.

Given that a lot of our message format changes are of type 3, I think it makes 
sense to stick with rolling our own messages.  The only debt we incur is 
maintaining the serialization methods, which hasn't been a substantial burden.

> 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