Repository: cassandra Updated Branches: refs/heads/cassandra-3.0 bd7d1198a -> 90e001312 refs/heads/trunk de49ed84c -> 760dbd957
Use byte to serialize MT hash length patch by Bharatendra Boddu; reviewed by yukim for CASSANDRA-9792 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/90e00131 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/90e00131 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/90e00131 Branch: refs/heads/cassandra-3.0 Commit: 90e0013126e4875d696891c67d1b22fdb2b8ba7a Parents: bd7d119 Author: Bharatendra Boddu <[email protected]> Authored: Wed Aug 5 15:30:00 2015 -0500 Committer: Yuki Morishita <[email protected]> Committed: Wed Aug 5 15:41:30 2015 -0500 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../org/apache/cassandra/utils/MerkleTree.java | 56 +++++++++++++------- 2 files changed, 39 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/90e00131/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index e1f1757..2a5be78 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -2,6 +2,7 @@ * Disable scripted UDFs by default (CASSANDRA-9889) * Add transparent data encryption core classes (CASSANDRA-9945) * Bytecode inspection for Java-UDFs (CASSANDRA-9890) + * Use byte to serialize MT hash length (CASSANDRA-9792) Merged from 2.2: * Log warning when using an aggregate without partition key (CASSANDRA-9737) Merged from 2.1: http://git-wip-us.apache.org/repos/asf/cassandra/blob/90e00131/src/java/org/apache/cassandra/utils/MerkleTree.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/utils/MerkleTree.java b/src/java/org/apache/cassandra/utils/MerkleTree.java index 3840622..b4a782d 100644 --- a/src/java/org/apache/cassandra/utils/MerkleTree.java +++ b/src/java/org/apache/cassandra/utils/MerkleTree.java @@ -35,6 +35,7 @@ import org.apache.cassandra.exceptions.ConfigurationException; import org.apache.cassandra.io.IVersionedSerializer; import org.apache.cassandra.io.util.DataInputPlus; import org.apache.cassandra.io.util.DataOutputPlus; +import org.apache.cassandra.net.MessagingService; /** * A MerkleTree implemented as a binary tree. @@ -817,12 +818,15 @@ public class MerkleTree implements Serializable { public void serialize(Inner inner, DataOutputPlus out, int version) throws IOException { - if (inner.hash == null) - out.writeInt(-1); - else + if (version < MessagingService.VERSION_30) { - out.writeInt(inner.hash.length); - out.write(inner.hash); + if (inner.hash == null) + out.writeInt(-1); + else + { + out.writeInt(inner.hash.length); + out.write(inner.hash); + } } Token.serializer.serialize(inner.token, out, version); Hashable.serializer.serialize(inner.lchild, out, version); @@ -831,10 +835,13 @@ public class MerkleTree implements Serializable public Inner deserialize(DataInput in, IPartitioner p, int version) throws IOException { - int hashLen = in.readInt(); - byte[] hash = hashLen >= 0 ? new byte[hashLen] : null; - if (hash != null) - in.readFully(hash); + if (version < MessagingService.VERSION_30) + { + int hashLen = in.readInt(); + byte[] hash = hashLen >= 0 ? new byte[hashLen] : null; + if (hash != null) + in.readFully(hash); + } Token token = Token.serializer.deserialize(in, p, version); Hashable lchild = Hashable.serializer.deserialize(in, p, version); Hashable rchild = Hashable.serializer.deserialize(in, p, version); @@ -843,9 +850,13 @@ public class MerkleTree implements Serializable public long serializedSize(Inner inner, int version) { - int size = inner.hash == null - ? TypeSizes.sizeof(-1) - : TypeSizes.sizeof(inner.hash().length) + inner.hash().length; + long size = 0; + if (version < MessagingService.VERSION_30) + { + size += inner.hash == null + ? TypeSizes.sizeof(-1) + : TypeSizes.sizeof(inner.hash().length) + inner.hash().length; + } size += Token.serializer.serializedSize(inner.token, version) + Hashable.serializer.serializedSize(inner.lchild, version) @@ -900,18 +911,24 @@ public class MerkleTree implements Serializable { if (leaf.hash == null) { - out.writeInt(-1); + if (version < MessagingService.VERSION_30) + out.writeInt(-1); + else + out.writeByte(-1); } else { - out.writeInt(leaf.hash.length); + if (version < MessagingService.VERSION_30) + out.writeInt(leaf.hash.length); + else + out.writeByte(leaf.hash.length); out.write(leaf.hash); } } public Leaf deserialize(DataInput in, IPartitioner p, int version) throws IOException { - int hashLen = in.readInt(); + int hashLen = version < MessagingService.VERSION_30 ? in.readInt() : in.readByte(); byte[] hash = hashLen < 0 ? null : new byte[hashLen]; if (hash != null) in.readFully(hash); @@ -920,9 +937,12 @@ public class MerkleTree implements Serializable public long serializedSize(Leaf leaf, int version) { - return leaf.hash == null - ? TypeSizes.sizeof(-1) - : TypeSizes.sizeof(leaf.hash().length) + leaf.hash().length; + long size = version < MessagingService.VERSION_30 ? TypeSizes.sizeof(1) : 1; + if (leaf.hash != null) + { + size += leaf.hash().length; + } + return size; } } }
