Updated Branches: refs/heads/trunk 09d3e7f7f -> 1693ee22f
fix cross-version gossip messaging patch by Pavel Yaskevich; reviewed by Brandon Williams for CASSANDRA-4576 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/1693ee22 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/1693ee22 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/1693ee22 Branch: refs/heads/trunk Commit: 1693ee22fe70049ee3dd45eb211fb4f902dc8d9f Parents: 09d3e7f Author: Pavel Yaskevich <[email protected]> Authored: Tue Sep 18 18:32:53 2012 +0300 Committer: Pavel Yaskevich <[email protected]> Committed: Wed Sep 19 01:24:52 2012 +0300 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../org/apache/cassandra/gms/GossipDigestAck.java | 4 ++-- .../org/apache/cassandra/gms/VersionedValue.java | 11 ++++++++--- 3 files changed, 11 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/1693ee22/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 1dd875e..3ff91ad 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -64,6 +64,7 @@ * (cql3) Add ALTER KEYSPACE statement (CASSANDRA-4611) * (cql3) Allow defining default consistency levels (CASSANDRA-4448) * (cql3) Fix queries using LIMIT missing results (CASSANDRA-4579) + * fix cross-version gossip messaging (CASSANDRA-4576) 1.1.6 http://git-wip-us.apache.org/repos/asf/cassandra/blob/1693ee22/src/java/org/apache/cassandra/gms/GossipDigestAck.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/gms/GossipDigestAck.java b/src/java/org/apache/cassandra/gms/GossipDigestAck.java index b7ea067..68dcff4 100644 --- a/src/java/org/apache/cassandra/gms/GossipDigestAck.java +++ b/src/java/org/apache/cassandra/gms/GossipDigestAck.java @@ -63,7 +63,7 @@ class GossipDigestAckSerializer implements IVersionedSerializer<GossipDigestAck> public void serialize(GossipDigestAck gDigestAckMessage, DataOutput dos, int version) throws IOException { GossipDigestSerializationHelper.serialize(gDigestAckMessage.gDigestList, dos, version); - if (version <= MessagingService.VERSION_10) + if (version <= MessagingService.VERSION_11) dos.writeBoolean(true); // 0.6 compatibility dos.writeInt(gDigestAckMessage.epStateMap.size()); for (Map.Entry<InetAddress, EndpointState> entry : gDigestAckMessage.epStateMap.entrySet()) @@ -77,7 +77,7 @@ class GossipDigestAckSerializer implements IVersionedSerializer<GossipDigestAck> public GossipDigestAck deserialize(DataInput dis, int version) throws IOException { List<GossipDigest> gDigestList = GossipDigestSerializationHelper.deserialize(dis, version); - if (version <= MessagingService.VERSION_10) + if (version <= MessagingService.VERSION_11) dis.readBoolean(); // 0.6 compatibility int size = dis.readInt(); Map<InetAddress, EndpointState> epStateMap = new HashMap<InetAddress, EndpointState>(size); http://git-wip-us.apache.org/repos/asf/cassandra/blob/1693ee22/src/java/org/apache/cassandra/gms/VersionedValue.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/gms/VersionedValue.java b/src/java/org/apache/cassandra/gms/VersionedValue.java index 8436adc..e2d68a7 100644 --- a/src/java/org/apache/cassandra/gms/VersionedValue.java +++ b/src/java/org/apache/cassandra/gms/VersionedValue.java @@ -260,14 +260,19 @@ public class VersionedValue implements Comparable<VersionedValue> if ((type.equals(STATUS_NORMAL)) || type.equals(STATUS_BOOTSTRAPPING)) { - assert pieces.length >= 3; - outValue = versionString(pieces[0], pieces[2]); + assert pieces.length >= 2; + outValue = versionString(pieces[0], pieces[1]); } if (type.equals(STATUS_LEFT)) { assert pieces.length >= 3; - outValue = versionString(pieces[0], pieces[2], pieces[1]); + + // three component 'left' was adopted starting from Cassandra 1.0 + // previous versions have '<type>:<token>' format + outValue = (version < MessagingService.VERSION_10) + ? versionString(pieces[0], pieces[2]) + : versionString(pieces[0], pieces[2], pieces[1]); } if ((type.equals(REMOVAL_COORDINATOR)) || (type.equals(REMOVING_TOKEN)) || (type.equals(REMOVED_TOKEN)))
