You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sl...@apache.org on 2015/07/21 16:05:23 UTC

cassandra git commit: Fix CFMetaData ids serialization

Repository: cassandra
Updated Branches:
  refs/heads/trunk a66863861 -> 6249a3b1e


Fix CFMetaData ids serialization

patch by slebresne; reviewed by iamaleksey for CASSANDRA-9848


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/6249a3b1
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/6249a3b1
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/6249a3b1

Branch: refs/heads/trunk
Commit: 6249a3b1e6f9f758cbdbd79ffc775e10874b3a56
Parents: a668638
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Mon Jul 20 12:12:46 2015 +0200
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Tue Jul 21 16:04:41 2015 +0200

----------------------------------------------------------------------
 CHANGES.txt                                       |  2 +-
 .../org/apache/cassandra/config/CFMetaData.java   | 18 +++++-------------
 .../org/apache/cassandra/db/ReadResponse.java     |  2 +-
 .../partitions/UnfilteredPartitionIterators.java  |  4 ++--
 .../db/rows/UnfilteredRowIteratorSerializer.java  |  5 +++--
 .../apache/cassandra/utils/UUIDSerializer.java    |  2 +-
 6 files changed, 13 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/6249a3b1/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 1f33e6c..1828476 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -2,7 +2,7 @@
  * Metrics should use up to date nomenclature (CASSANDRA-9448)
  * Change CREATE/ALTER TABLE syntax for compression (CASSANDRA-8384)
  * Cleanup crc and adler code for java 8 (CASSANDRA-9650)
- * Storage engine refactor (CASSANDRA-8099, 9743, 9746, 9759, 9781, 9808, 9825)
+ * Storage engine refactor (CASSANDRA-8099, 9743, 9746, 9759, 9781, 9808, 9825, 9848)
  * Update Guava to 18.0 (CASSANDRA-9653)
  * Bloom filter false positive ratio is not honoured (CASSANDRA-8413)
  * New option for cassandra-stress to leave a ratio of columns null (CASSANDRA-9522)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6249a3b1/src/java/org/apache/cassandra/config/CFMetaData.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/CFMetaData.java b/src/java/org/apache/cassandra/config/CFMetaData.java
index 6c53699..3b43960 100644
--- a/src/java/org/apache/cassandra/config/CFMetaData.java
+++ b/src/java/org/apache/cassandra/config/CFMetaData.java
@@ -17,7 +17,6 @@
  */
 package org.apache.cassandra.config;
 
-import java.io.DataInput;
 import java.io.IOException;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
@@ -49,6 +48,7 @@ import org.apache.cassandra.db.marshal.*;
 import org.apache.cassandra.exceptions.*;
 import org.apache.cassandra.io.compress.CompressionParameters;
 import org.apache.cassandra.io.compress.LZ4Compressor;
+import org.apache.cassandra.io.util.DataInputPlus;
 import org.apache.cassandra.io.util.DataOutputPlus;
 import org.apache.cassandra.schema.SchemaKeyspace;
 import org.apache.cassandra.schema.Triggers;
@@ -1507,23 +1507,16 @@ public final class CFMetaData
         }
     }
 
-    // We don't use UUIDSerializer below because we want to use this with vint-encoded streams and UUIDSerializer
-    // currently assumes a NATIVE encoding. This is also why we don't use writeLong()/readLong in the methods below:
-    // this would encode the values, but by design of UUID it is likely that both long will be very big numbers
-    // and so we have a fair change that the encoding will take more than 16 bytes which is not desirable. Note that
-    // we could make UUIDSerializer work as the serializer below, but I'll keep that to later.
     public static class Serializer
     {
         public void serialize(CFMetaData metadata, DataOutputPlus out, int version) throws IOException
         {
-            // for some reason these are stored is LITTLE_ENDIAN; so just reverse them
-            out.writeLong(Long.reverseBytes(metadata.cfId.getMostSignificantBits()));
-            out.writeLong(Long.reverseBytes(metadata.cfId.getLeastSignificantBits()));
+            UUIDSerializer.serializer.serialize(metadata.cfId, out, version);
         }
 
-        public CFMetaData deserialize(DataInput in, int version) throws IOException
+        public CFMetaData deserialize(DataInputPlus in, int version) throws IOException
         {
-            UUID cfId = new UUID(Long.reverseBytes(in.readLong()), Long.reverseBytes(in.readLong()));
+            UUID cfId = UUIDSerializer.serializer.deserialize(in, version);
             CFMetaData metadata = Schema.instance.getCFMetaData(cfId);
             if (metadata == null)
             {
@@ -1538,8 +1531,7 @@ public final class CFMetaData
 
         public long serializedSize(CFMetaData metadata, int version)
         {
-            // We've made sure it was encoded as 16 bytes whatever the TypeSizes is.
-            return 16;
+            return UUIDSerializer.serializer.serializedSize(metadata.cfId, version);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6249a3b1/src/java/org/apache/cassandra/db/ReadResponse.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ReadResponse.java b/src/java/org/apache/cassandra/db/ReadResponse.java
index 6a61416..3737a38 100644
--- a/src/java/org/apache/cassandra/db/ReadResponse.java
+++ b/src/java/org/apache/cassandra/db/ReadResponse.java
@@ -116,7 +116,7 @@ public abstract class ReadResponse
         {
             try
             {
-                DataInput in = new DataInputStream(ByteBufferUtil.inputStream(data));
+                DataInputPlus in = new DataInputPlus.DataInputStreamPlus(ByteBufferUtil.inputStream(data));
                 return UnfilteredPartitionIterators.serializerForIntraNode().deserialize(in, MessagingService.current_version, flag);
             }
             catch (IOException e)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6249a3b1/src/java/org/apache/cassandra/db/partitions/UnfilteredPartitionIterators.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/partitions/UnfilteredPartitionIterators.java b/src/java/org/apache/cassandra/db/partitions/UnfilteredPartitionIterators.java
index 8b2ef03..0d3d364 100644
--- a/src/java/org/apache/cassandra/db/partitions/UnfilteredPartitionIterators.java
+++ b/src/java/org/apache/cassandra/db/partitions/UnfilteredPartitionIterators.java
@@ -17,7 +17,6 @@
  */
 package org.apache.cassandra.db.partitions;
 
-import java.io.DataInput;
 import java.io.IOError;
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -29,6 +28,7 @@ import org.apache.cassandra.config.ColumnDefinition;
 import org.apache.cassandra.cql3.ColumnIdentifier;
 import org.apache.cassandra.db.*;
 import org.apache.cassandra.db.rows.*;
+import org.apache.cassandra.io.util.DataInputPlus;
 import org.apache.cassandra.io.util.DataOutputPlus;
 import org.apache.cassandra.net.MessagingService;
 import org.apache.cassandra.utils.MergeIterator;
@@ -435,7 +435,7 @@ public abstract class UnfilteredPartitionIterators
             out.writeBoolean(false);
         }
 
-        public UnfilteredPartitionIterator deserialize(final DataInput in, final int version, final SerializationHelper.Flag flag) throws IOException
+        public UnfilteredPartitionIterator deserialize(final DataInputPlus in, final int version, final SerializationHelper.Flag flag) throws IOException
         {
             if (version < MessagingService.VERSION_30)
                 throw new UnsupportedOperationException();

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6249a3b1/src/java/org/apache/cassandra/db/rows/UnfilteredRowIteratorSerializer.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/rows/UnfilteredRowIteratorSerializer.java b/src/java/org/apache/cassandra/db/rows/UnfilteredRowIteratorSerializer.java
index a4cfda7..8abd228 100644
--- a/src/java/org/apache/cassandra/db/rows/UnfilteredRowIteratorSerializer.java
+++ b/src/java/org/apache/cassandra/db/rows/UnfilteredRowIteratorSerializer.java
@@ -26,6 +26,7 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.cassandra.config.CFMetaData;
 import org.apache.cassandra.db.*;
+import org.apache.cassandra.io.util.DataInputPlus;
 import org.apache.cassandra.io.util.DataOutputPlus;
 import org.apache.cassandra.service.StorageService;
 import org.apache.cassandra.utils.ByteBufferUtil;
@@ -174,7 +175,7 @@ public class UnfilteredRowIteratorSerializer
         return size;
     }
 
-    public Header deserializeHeader(DataInput in, int version, SerializationHelper.Flag flag) throws IOException
+    public Header deserializeHeader(DataInputPlus in, int version, SerializationHelper.Flag flag) throws IOException
     {
         CFMetaData metadata = CFMetaData.serializer.deserialize(in, version);
         DecoratedKey key = StorageService.getPartitioner().decorateKey(ByteBufferUtil.readWithLength(in));
@@ -207,7 +208,7 @@ public class UnfilteredRowIteratorSerializer
         while (UnfilteredSerializer.serializer.deserialize(in, header, helper, rowWriter, markerWriter) != null);
     }
 
-    public UnfilteredRowIterator deserialize(final DataInput in, int version, SerializationHelper.Flag flag) throws IOException
+    public UnfilteredRowIterator deserialize(final DataInputPlus in, int version, SerializationHelper.Flag flag) throws IOException
     {
         final Header h = deserializeHeader(in, version, flag);
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6249a3b1/src/java/org/apache/cassandra/utils/UUIDSerializer.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/utils/UUIDSerializer.java b/src/java/org/apache/cassandra/utils/UUIDSerializer.java
index 2b174fe..47b6f8c 100644
--- a/src/java/org/apache/cassandra/utils/UUIDSerializer.java
+++ b/src/java/org/apache/cassandra/utils/UUIDSerializer.java
@@ -44,4 +44,4 @@ public class UUIDSerializer implements IVersionedSerializer<UUID>
     {
         return TypeSizes.sizeof(uuid.getMostSignificantBits()) + TypeSizes.sizeof(uuid.getLeastSignificantBits());
     }
-}
\ No newline at end of file
+}