Migrate all size serialization to unsigned vint encoded

Unsigned vint encoding is more efficient in both CPU and disk burden,
so this patch employs it wherever sensible.

patch by benedict; reviewed by sylvain for CASSANDRA-10351


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

Branch: refs/heads/trunk
Commit: 649a106c39b6a166c988fb647eaa33341e7371c4
Parents: 8134f09
Author: Benedict Elliott Smith <[email protected]>
Authored: Wed Sep 16 10:33:22 2015 +0100
Committer: Benedict Elliott Smith <[email protected]>
Committed: Wed Sep 16 13:16:47 2015 +0100

----------------------------------------------------------------------
 .../org/apache/cassandra/batchlog/Batch.java    | 16 ++++-----
 src/java/org/apache/cassandra/db/Columns.java   |  6 ++--
 src/java/org/apache/cassandra/db/Mutation.java  |  6 ++--
 .../org/apache/cassandra/db/ReadCommand.java    |  6 ++--
 .../cassandra/db/SerializationHeader.java       | 36 ++++++++++----------
 src/java/org/apache/cassandra/db/Slices.java    |  6 ++--
 src/java/org/apache/cassandra/db/TypeSizes.java |  2 +-
 .../db/filter/ClusteringIndexNamesFilter.java   |  6 ++--
 .../cassandra/db/filter/ColumnFilter.java       |  6 ++--
 .../apache/cassandra/db/filter/DataLimits.java  | 30 ++++++++--------
 .../apache/cassandra/db/filter/RowFilter.java   |  6 ++--
 .../apache/cassandra/db/rows/EncodingStats.java | 18 +++++-----
 .../rows/UnfilteredRowIteratorSerializer.java   |  6 ++--
 .../cassandra/hints/EncodedHintMessage.java     |  4 +--
 src/java/org/apache/cassandra/hints/Hint.java   |  8 ++---
 .../org/apache/cassandra/hints/HintMessage.java |  6 ++--
 .../cassandra/io/util/DataOutputPlus.java       |  8 ++---
 .../apache/cassandra/utils/ByteBufferUtil.java  |  8 ++---
 18 files changed, 92 insertions(+), 92 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/649a106c/src/java/org/apache/cassandra/batchlog/Batch.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/batchlog/Batch.java 
b/src/java/org/apache/cassandra/batchlog/Batch.java
index caa2682..e91e3ca 100644
--- a/src/java/org/apache/cassandra/batchlog/Batch.java
+++ b/src/java/org/apache/cassandra/batchlog/Batch.java
@@ -30,7 +30,7 @@ import org.apache.cassandra.utils.ByteBufferUtil;
 import org.apache.cassandra.utils.UUIDSerializer;
 
 import static org.apache.cassandra.db.TypeSizes.sizeof;
-import static org.apache.cassandra.db.TypeSizes.sizeofVInt;
+import static org.apache.cassandra.db.TypeSizes.sizeofUnsignedVInt;
 
 public final class Batch
 {
@@ -87,11 +87,11 @@ public final class Batch
             long size = UUIDSerializer.serializer.serializedSize(batch.id, 
version);
             size += sizeof(batch.creationTime);
 
-            size += sizeofVInt(batch.decodedMutations.size());
+            size += sizeofUnsignedVInt(batch.decodedMutations.size());
             for (Mutation mutation : batch.decodedMutations)
             {
                 int mutationSize = (int) 
Mutation.serializer.serializedSize(mutation, version);
-                size += sizeofVInt(mutationSize);
+                size += sizeofUnsignedVInt(mutationSize);
                 size += mutationSize;
             }
 
@@ -105,10 +105,10 @@ public final class Batch
             UUIDSerializer.serializer.serialize(batch.id, out, version);
             out.writeLong(batch.creationTime);
 
-            out.writeVInt(batch.decodedMutations.size());
+            out.writeUnsignedVInt(batch.decodedMutations.size());
             for (Mutation mutation : batch.decodedMutations)
             {
-                out.writeVInt(Mutation.serializer.serializedSize(mutation, 
version));
+                
out.writeUnsignedVInt(Mutation.serializer.serializedSize(mutation, version));
                 Mutation.serializer.serialize(mutation, out, version);
             }
         }
@@ -129,7 +129,7 @@ public final class Batch
 
         private static Collection<ByteBuffer> 
readEncodedMutations(DataInputPlus in) throws IOException
         {
-            int count = (int) in.readVInt();
+            int count = (int) in.readUnsignedVInt();
 
             ArrayList<ByteBuffer> mutations = new ArrayList<>(count);
             for (int i = 0; i < count; i++)
@@ -140,12 +140,12 @@ public final class Batch
 
         private static Collection<Mutation> decodeMutations(DataInputPlus in, 
int version) throws IOException
         {
-            int count = (int) in.readVInt();
+            int count = (int) in.readUnsignedVInt();
 
             ArrayList<Mutation> mutations = new ArrayList<>(count);
             for (int i = 0; i < count; i++)
             {
-                in.readVInt(); // skip mutation size
+                in.readUnsignedVInt(); // skip mutation size
                 mutations.add(Mutation.serializer.deserialize(in, version));
             }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/649a106c/src/java/org/apache/cassandra/db/Columns.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/Columns.java 
b/src/java/org/apache/cassandra/db/Columns.java
index 442f77f..cad295c 100644
--- a/src/java/org/apache/cassandra/db/Columns.java
+++ b/src/java/org/apache/cassandra/db/Columns.java
@@ -400,14 +400,14 @@ public class Columns extends 
AbstractCollection<ColumnDefinition> implements Col
     {
         public void serialize(Columns columns, DataOutputPlus out) throws 
IOException
         {
-            out.writeVInt(columns.size());
+            out.writeUnsignedVInt(columns.size());
             for (ColumnDefinition column : columns)
                 ByteBufferUtil.writeWithVIntLength(column.name.bytes, out);
         }
 
         public long serializedSize(Columns columns)
         {
-            long size = TypeSizes.sizeofVInt(columns.size());
+            long size = TypeSizes.sizeofUnsignedVInt(columns.size());
             for (ColumnDefinition column : columns)
                 size += 
ByteBufferUtil.serializedSizeWithVIntLength(column.name.bytes);
             return size;
@@ -415,7 +415,7 @@ public class Columns extends 
AbstractCollection<ColumnDefinition> implements Col
 
         public Columns deserialize(DataInputPlus in, CFMetaData metadata) 
throws IOException
         {
-            int length = (int)in.readVInt();
+            int length = (int)in.readUnsignedVInt();
             BTree.Builder<ColumnDefinition> builder = 
BTree.builder(Comparator.naturalOrder());
             builder.auto(false);
             for (int i = 0; i < length; i++)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/649a106c/src/java/org/apache/cassandra/db/Mutation.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/Mutation.java 
b/src/java/org/apache/cassandra/db/Mutation.java
index da7d13d..7696e04 100644
--- a/src/java/org/apache/cassandra/db/Mutation.java
+++ b/src/java/org/apache/cassandra/db/Mutation.java
@@ -279,7 +279,7 @@ public class Mutation implements IMutation
             }
             else
             {
-                out.writeVInt(size);
+                out.writeUnsignedVInt(size);
             }
 
             assert size > 0;
@@ -301,7 +301,7 @@ public class Mutation implements IMutation
             }
             else
             {
-                size = (int)in.readVInt();
+                size = (int)in.readUnsignedVInt();
             }
 
             assert size > 0;
@@ -343,7 +343,7 @@ public class Mutation implements IMutation
             }
             else
             {
-                size += TypeSizes.sizeofVInt(mutation.modifications.size());
+                size += 
TypeSizes.sizeofUnsignedVInt(mutation.modifications.size());
             }
 
             for (Map.Entry<UUID, PartitionUpdate> entry : 
mutation.modifications.entrySet())

http://git-wip-us.apache.org/repos/asf/cassandra/blob/649a106c/src/java/org/apache/cassandra/db/ReadCommand.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ReadCommand.java 
b/src/java/org/apache/cassandra/db/ReadCommand.java
index e183963..d2e4bbc 100644
--- a/src/java/org/apache/cassandra/db/ReadCommand.java
+++ b/src/java/org/apache/cassandra/db/ReadCommand.java
@@ -564,7 +564,7 @@ public abstract class ReadCommand implements ReadQuery
             out.writeByte(command.kind.ordinal());
             out.writeByte(digestFlag(command.isDigestQuery()) | 
thriftFlag(command.isForThrift()) | indexFlag(command.index.isPresent()));
             if (command.isDigestQuery())
-                out.writeVInt(command.digestVersion());
+                out.writeUnsignedVInt(command.digestVersion());
             CFMetaData.serializer.serialize(command.metadata(), out, version);
             out.writeInt(command.nowInSec());
             ColumnFilter.serializer.serialize(command.columnFilter(), out, 
version);
@@ -586,7 +586,7 @@ public abstract class ReadCommand implements ReadQuery
             boolean isDigest = isDigest(flags);
             boolean isForThrift = isForThrift(flags);
             boolean hasIndex = hasIndex(flags);
-            int digestVersion = isDigest ? (int)in.readVInt() : 0;
+            int digestVersion = isDigest ? (int)in.readUnsignedVInt() : 0;
             CFMetaData metadata = CFMetaData.serializer.deserialize(in, 
version);
             int nowInSec = in.readInt();
             ColumnFilter columnFilter = 
ColumnFilter.serializer.deserialize(in, version, metadata);
@@ -623,7 +623,7 @@ public abstract class ReadCommand implements ReadQuery
             assert version >= MessagingService.VERSION_30;
 
             return 2 // kind + flags
-                 + (command.isDigestQuery() ? 
TypeSizes.sizeofVInt(command.digestVersion()) : 0)
+                 + (command.isDigestQuery() ? 
TypeSizes.sizeofUnsignedVInt(command.digestVersion()) : 0)
                  + CFMetaData.serializer.serializedSize(command.metadata(), 
version)
                  + TypeSizes.sizeof(command.nowInSec())
                  + 
ColumnFilter.serializer.serializedSize(command.columnFilter(), version)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/649a106c/src/java/org/apache/cassandra/db/SerializationHeader.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/SerializationHeader.java 
b/src/java/org/apache/cassandra/db/SerializationHeader.java
index 70c5401..decac49 100644
--- a/src/java/org/apache/cassandra/db/SerializationHeader.java
+++ b/src/java/org/apache/cassandra/db/SerializationHeader.java
@@ -164,17 +164,17 @@ public class SerializationHeader
 
     public void writeTimestamp(long timestamp, DataOutputPlus out) throws 
IOException
     {
-        out.writeVInt(timestamp - stats.minTimestamp);
+        out.writeUnsignedVInt(timestamp - stats.minTimestamp);
     }
 
     public void writeLocalDeletionTime(int localDeletionTime, DataOutputPlus 
out) throws IOException
     {
-        out.writeVInt(localDeletionTime - stats.minLocalDeletionTime);
+        out.writeUnsignedVInt(localDeletionTime - stats.minLocalDeletionTime);
     }
 
     public void writeTTL(int ttl, DataOutputPlus out) throws IOException
     {
-        out.writeVInt(ttl - stats.minTTL);
+        out.writeUnsignedVInt(ttl - stats.minTTL);
     }
 
     public void writeDeletionTime(DeletionTime dt, DataOutputPlus out) throws 
IOException
@@ -185,17 +185,17 @@ public class SerializationHeader
 
     public long readTimestamp(DataInputPlus in) throws IOException
     {
-        return in.readVInt() + stats.minTimestamp;
+        return in.readUnsignedVInt() + stats.minTimestamp;
     }
 
     public int readLocalDeletionTime(DataInputPlus in) throws IOException
     {
-        return (int)in.readVInt() + stats.minLocalDeletionTime;
+        return (int)in.readUnsignedVInt() + stats.minLocalDeletionTime;
     }
 
     public int readTTL(DataInputPlus in) throws IOException
     {
-        return (int)in.readVInt() + stats.minTTL;
+        return (int)in.readUnsignedVInt() + stats.minTTL;
     }
 
     public DeletionTime readDeletionTime(DataInputPlus in) throws IOException
@@ -207,17 +207,17 @@ public class SerializationHeader
 
     public long timestampSerializedSize(long timestamp)
     {
-        return TypeSizes.sizeofVInt(timestamp - stats.minTimestamp);
+        return TypeSizes.sizeofUnsignedVInt(timestamp - stats.minTimestamp);
     }
 
     public long localDeletionTimeSerializedSize(int localDeletionTime)
     {
-        return TypeSizes.sizeofVInt(localDeletionTime - 
stats.minLocalDeletionTime);
+        return TypeSizes.sizeofUnsignedVInt(localDeletionTime - 
stats.minLocalDeletionTime);
     }
 
     public long ttlSerializedSize(int ttl)
     {
-        return TypeSizes.sizeofVInt(ttl - stats.minTTL);
+        return TypeSizes.sizeofUnsignedVInt(ttl - stats.minTTL);
     }
 
     public long deletionTimeSerializedSize(DeletionTime dt)
@@ -228,17 +228,17 @@ public class SerializationHeader
 
     public void skipTimestamp(DataInputPlus in) throws IOException
     {
-        in.readVInt();
+        in.readUnsignedVInt();
     }
 
     public void skipLocalDeletionTime(DataInputPlus in) throws IOException
     {
-        in.readVInt();
+        in.readUnsignedVInt();
     }
 
     public void skipTTL(DataInputPlus in) throws IOException
     {
-        in.readVInt();
+        in.readUnsignedVInt();
     }
 
     public void skipDeletionTime(DataInputPlus in) throws IOException
@@ -418,7 +418,7 @@ public class SerializationHeader
             EncodingStats.serializer.serialize(header.stats, out);
 
             writeType(header.keyType, out);
-            out.writeVInt(header.clusteringTypes.size());
+            out.writeUnsignedVInt(header.clusteringTypes.size());
             for (AbstractType<?> type : header.clusteringTypes)
                 writeType(type, out);
 
@@ -432,7 +432,7 @@ public class SerializationHeader
             EncodingStats stats = EncodingStats.serializer.deserialize(in);
 
             AbstractType<?> keyType = readType(in);
-            int size = (int)in.readVInt();
+            int size = (int)in.readUnsignedVInt();
             List<AbstractType<?>> clusteringTypes = new ArrayList<>(size);
             for (int i = 0; i < size; i++)
                 clusteringTypes.add(readType(in));
@@ -452,7 +452,7 @@ public class SerializationHeader
             int size = EncodingStats.serializer.serializedSize(header.stats);
 
             size += sizeofType(header.keyType);
-            size += TypeSizes.sizeofVInt(header.clusteringTypes.size());
+            size += 
TypeSizes.sizeofUnsignedVInt(header.clusteringTypes.size());
             for (AbstractType<?> type : header.clusteringTypes)
                 size += sizeofType(type);
 
@@ -463,7 +463,7 @@ public class SerializationHeader
 
         private void writeColumnsWithTypes(Map<ByteBuffer, AbstractType<?>> 
columns, DataOutputPlus out) throws IOException
         {
-            out.writeVInt(columns.size());
+            out.writeUnsignedVInt(columns.size());
             for (Map.Entry<ByteBuffer, AbstractType<?>> entry : 
columns.entrySet())
             {
                 ByteBufferUtil.writeWithVIntLength(entry.getKey(), out);
@@ -473,7 +473,7 @@ public class SerializationHeader
 
         private long sizeofColumnsWithTypes(Map<ByteBuffer, AbstractType<?>> 
columns)
         {
-            long size = TypeSizes.sizeofVInt(columns.size());
+            long size = TypeSizes.sizeofUnsignedVInt(columns.size());
             for (Map.Entry<ByteBuffer, AbstractType<?>> entry : 
columns.entrySet())
             {
                 size += 
ByteBufferUtil.serializedSizeWithVIntLength(entry.getKey());
@@ -484,7 +484,7 @@ public class SerializationHeader
 
         private void readColumnsWithType(DataInputPlus in, Map<ByteBuffer, 
AbstractType<?>> typeMap) throws IOException
         {
-            int length = (int)in.readVInt();
+            int length = (int)in.readUnsignedVInt();
             for (int i = 0; i < length; i++)
             {
                 ByteBuffer name = ByteBufferUtil.readWithVIntLength(in);

http://git-wip-us.apache.org/repos/asf/cassandra/blob/649a106c/src/java/org/apache/cassandra/db/Slices.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/Slices.java 
b/src/java/org/apache/cassandra/db/Slices.java
index db34c86..8fa9337 100644
--- a/src/java/org/apache/cassandra/db/Slices.java
+++ b/src/java/org/apache/cassandra/db/Slices.java
@@ -297,7 +297,7 @@ public abstract class Slices implements Iterable<Slice>
         public void serialize(Slices slices, DataOutputPlus out, int version) 
throws IOException
         {
             int size = slices.size();
-            out.writeVInt(size);
+            out.writeUnsignedVInt(size);
 
             if (size == 0)
                 return;
@@ -312,7 +312,7 @@ public abstract class Slices implements Iterable<Slice>
 
         public long serializedSize(Slices slices, int version)
         {
-            long size = TypeSizes.sizeofVInt(slices.size());
+            long size = TypeSizes.sizeofUnsignedVInt(slices.size());
 
             if (slices.size() == 0)
                 return size;
@@ -329,7 +329,7 @@ public abstract class Slices implements Iterable<Slice>
 
         public Slices deserialize(DataInputPlus in, int version, CFMetaData 
metadata) throws IOException
         {
-            int size = (int)in.readVInt();
+            int size = (int)in.readUnsignedVInt();
 
             if (size == 0)
                 return NONE;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/649a106c/src/java/org/apache/cassandra/db/TypeSizes.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/TypeSizes.java 
b/src/java/org/apache/cassandra/db/TypeSizes.java
index 7e5bd87..6543025 100644
--- a/src/java/org/apache/cassandra/db/TypeSizes.java
+++ b/src/java/org/apache/cassandra/db/TypeSizes.java
@@ -70,7 +70,7 @@ public final class TypeSizes
 
     public static int sizeofWithVIntLength(ByteBuffer value)
     {
-        return sizeofVInt(value.remaining()) + value.remaining();
+        return sizeofUnsignedVInt(value.remaining()) + value.remaining();
     }
 
     public static int sizeof(boolean value)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/649a106c/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java
----------------------------------------------------------------------
diff --git 
a/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java 
b/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java
index e0bc533..d3a289a 100644
--- a/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java
+++ b/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java
@@ -240,7 +240,7 @@ public class ClusteringIndexNamesFilter extends 
AbstractClusteringIndexFilter
     protected void serializeInternal(DataOutputPlus out, int version) throws 
IOException
     {
         ClusteringComparator comparator = 
(ClusteringComparator)clusterings.comparator();
-        out.writeVInt(clusterings.size());
+        out.writeUnsignedVInt(clusterings.size());
         for (Clustering clustering : clusterings)
             Clustering.serializer.serialize(clustering, out, version, 
comparator.subtypes());
     }
@@ -248,7 +248,7 @@ public class ClusteringIndexNamesFilter extends 
AbstractClusteringIndexFilter
     protected long serializedSizeInternal(int version)
     {
         ClusteringComparator comparator = 
(ClusteringComparator)clusterings.comparator();
-        long size = TypeSizes.sizeofVInt(clusterings.size());
+        long size = TypeSizes.sizeofUnsignedVInt(clusterings.size());
         for (Clustering clustering : clusterings)
             size += Clustering.serializer.serializedSize(clustering, version, 
comparator.subtypes());
         return size;
@@ -260,7 +260,7 @@ public class ClusteringIndexNamesFilter extends 
AbstractClusteringIndexFilter
         {
             ClusteringComparator comparator = metadata.comparator;
             BTreeSet.Builder<Clustering> clusterings = 
BTreeSet.builder(comparator);
-            int size = (int)in.readVInt();
+            int size = (int)in.readUnsignedVInt();
             for (int i = 0; i < size; i++)
                 clusterings.add(Clustering.serializer.deserialize(in, version, 
comparator.subtypes()));
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/649a106c/src/java/org/apache/cassandra/db/filter/ColumnFilter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/filter/ColumnFilter.java 
b/src/java/org/apache/cassandra/db/filter/ColumnFilter.java
index 29b3164..1a4573e 100644
--- a/src/java/org/apache/cassandra/db/filter/ColumnFilter.java
+++ b/src/java/org/apache/cassandra/db/filter/ColumnFilter.java
@@ -368,7 +368,7 @@ public class ColumnFilter
 
             if (selection.subSelections != null)
             {
-                out.writeVInt(selection.subSelections.size());
+                out.writeUnsignedVInt(selection.subSelections.size());
                 for (ColumnSubselection subSel : 
selection.subSelections.values())
                     ColumnSubselection.serializer.serialize(subSel, out, 
version);
             }
@@ -393,7 +393,7 @@ public class ColumnFilter
             if (hasSubSelections)
             {
                 subSelections = 
TreeMultimap.create(Comparator.<ColumnIdentifier>naturalOrder(), 
Comparator.<ColumnSubselection>naturalOrder());
-                int size = (int)in.readVInt();
+                int size = (int)in.readUnsignedVInt();
                 for (int i = 0; i < size; i++)
                 {
                     ColumnSubselection subSel = 
ColumnSubselection.serializer.deserialize(in, version, metadata);
@@ -417,7 +417,7 @@ public class ColumnFilter
             if (selection.subSelections != null)
             {
 
-                size += TypeSizes.sizeofVInt(selection.subSelections.size());
+                size += 
TypeSizes.sizeofUnsignedVInt(selection.subSelections.size());
                 for (ColumnSubselection subSel : 
selection.subSelections.values())
                     size += 
ColumnSubselection.serializer.serializedSize(subSel, version);
             }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/649a106c/src/java/org/apache/cassandra/db/filter/DataLimits.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/filter/DataLimits.java 
b/src/java/org/apache/cassandra/db/filter/DataLimits.java
index 0d6f816..75c8290 100644
--- a/src/java/org/apache/cassandra/db/filter/DataLimits.java
+++ b/src/java/org/apache/cassandra/db/filter/DataLimits.java
@@ -644,21 +644,21 @@ public abstract class DataLimits
                 case CQL_LIMIT:
                 case CQL_PAGING_LIMIT:
                     CQLLimits cqlLimits = (CQLLimits)limits;
-                    out.writeVInt(cqlLimits.rowLimit);
-                    out.writeVInt(cqlLimits.perPartitionLimit);
+                    out.writeUnsignedVInt(cqlLimits.rowLimit);
+                    out.writeUnsignedVInt(cqlLimits.perPartitionLimit);
                     out.writeBoolean(cqlLimits.isDistinct);
                     if (limits.kind() == Kind.CQL_PAGING_LIMIT)
                     {
                         CQLPagingLimits pagingLimits = 
(CQLPagingLimits)cqlLimits;
                         
ByteBufferUtil.writeWithVIntLength(pagingLimits.lastReturnedKey, out);
-                        out.writeVInt(pagingLimits.lastReturnedKeyRemaining);
+                        
out.writeUnsignedVInt(pagingLimits.lastReturnedKeyRemaining);
                     }
                     break;
                 case THRIFT_LIMIT:
                 case SUPER_COLUMN_COUNTING_LIMIT:
                     ThriftLimits thriftLimits = (ThriftLimits)limits;
-                    out.writeVInt(thriftLimits.partitionLimit);
-                    out.writeVInt(thriftLimits.cellPerPartitionLimit);
+                    out.writeUnsignedVInt(thriftLimits.partitionLimit);
+                    out.writeUnsignedVInt(thriftLimits.cellPerPartitionLimit);
                     break;
             }
         }
@@ -670,19 +670,19 @@ public abstract class DataLimits
             {
                 case CQL_LIMIT:
                 case CQL_PAGING_LIMIT:
-                    int rowLimit = (int)in.readVInt();
-                    int perPartitionLimit = (int)in.readVInt();
+                    int rowLimit = (int)in.readUnsignedVInt();
+                    int perPartitionLimit = (int)in.readUnsignedVInt();
                     boolean isDistinct = in.readBoolean();
                     if (kind == Kind.CQL_LIMIT)
                         return new CQLLimits(rowLimit, perPartitionLimit, 
isDistinct);
 
                     ByteBuffer lastKey = ByteBufferUtil.readWithVIntLength(in);
-                    int lastRemaining = (int)in.readVInt();
+                    int lastRemaining = (int)in.readUnsignedVInt();
                     return new CQLPagingLimits(rowLimit, perPartitionLimit, 
isDistinct, lastKey, lastRemaining);
                 case THRIFT_LIMIT:
                 case SUPER_COLUMN_COUNTING_LIMIT:
-                    int partitionLimit = (int)in.readVInt();
-                    int cellPerPartitionLimit = (int)in.readVInt();
+                    int partitionLimit = (int)in.readUnsignedVInt();
+                    int cellPerPartitionLimit = (int)in.readUnsignedVInt();
                     return kind == Kind.THRIFT_LIMIT
                          ? new ThriftLimits(partitionLimit, 
cellPerPartitionLimit)
                          : new SuperColumnCountingLimits(partitionLimit, 
cellPerPartitionLimit);
@@ -698,21 +698,21 @@ public abstract class DataLimits
                 case CQL_LIMIT:
                 case CQL_PAGING_LIMIT:
                     CQLLimits cqlLimits = (CQLLimits)limits;
-                    size += TypeSizes.sizeofVInt(cqlLimits.rowLimit);
-                    size += TypeSizes.sizeofVInt(cqlLimits.perPartitionLimit);
+                    size += TypeSizes.sizeofUnsignedVInt(cqlLimits.rowLimit);
+                    size += 
TypeSizes.sizeofUnsignedVInt(cqlLimits.perPartitionLimit);
                     size += TypeSizes.sizeof(cqlLimits.isDistinct);
                     if (limits.kind() == Kind.CQL_PAGING_LIMIT)
                     {
                         CQLPagingLimits pagingLimits = 
(CQLPagingLimits)cqlLimits;
                         size += 
ByteBufferUtil.serializedSizeWithVIntLength(pagingLimits.lastReturnedKey);
-                        size += 
TypeSizes.sizeofVInt(pagingLimits.lastReturnedKeyRemaining);
+                        size += 
TypeSizes.sizeofUnsignedVInt(pagingLimits.lastReturnedKeyRemaining);
                     }
                     break;
                 case THRIFT_LIMIT:
                 case SUPER_COLUMN_COUNTING_LIMIT:
                     ThriftLimits thriftLimits = (ThriftLimits)limits;
-                    size += TypeSizes.sizeofVInt(thriftLimits.partitionLimit);
-                    size += 
TypeSizes.sizeofVInt(thriftLimits.cellPerPartitionLimit);
+                    size += 
TypeSizes.sizeofUnsignedVInt(thriftLimits.partitionLimit);
+                    size += 
TypeSizes.sizeofUnsignedVInt(thriftLimits.cellPerPartitionLimit);
                     break;
                 default:
                     throw new AssertionError();

http://git-wip-us.apache.org/repos/asf/cassandra/blob/649a106c/src/java/org/apache/cassandra/db/filter/RowFilter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/filter/RowFilter.java 
b/src/java/org/apache/cassandra/db/filter/RowFilter.java
index bbec004..bf92efb 100644
--- a/src/java/org/apache/cassandra/db/filter/RowFilter.java
+++ b/src/java/org/apache/cassandra/db/filter/RowFilter.java
@@ -748,7 +748,7 @@ public abstract class RowFilter implements 
Iterable<RowFilter.Expression>
         public void serialize(RowFilter filter, DataOutputPlus out, int 
version) throws IOException
         {
             out.writeBoolean(filter instanceof ThriftFilter);
-            out.writeVInt(filter.expressions.size());
+            out.writeUnsignedVInt(filter.expressions.size());
             for (Expression expr : filter.expressions)
                 Expression.serializer.serialize(expr, out, version);
         }
@@ -756,7 +756,7 @@ public abstract class RowFilter implements 
Iterable<RowFilter.Expression>
         public RowFilter deserialize(DataInputPlus in, int version, CFMetaData 
metadata) throws IOException
         {
             boolean forThrift = in.readBoolean();
-            int size = (int)in.readVInt();
+            int size = (int)in.readUnsignedVInt();
             List<Expression> expressions = new ArrayList<>(size);
             for (int i = 0; i < size; i++)
                 expressions.add(Expression.serializer.deserialize(in, version, 
metadata));
@@ -768,7 +768,7 @@ public abstract class RowFilter implements 
Iterable<RowFilter.Expression>
         public long serializedSize(RowFilter filter, int version)
         {
             long size = 1 // forThrift
-                      + TypeSizes.sizeofVInt(filter.expressions.size());
+                      + 
TypeSizes.sizeofUnsignedVInt(filter.expressions.size());
             for (Expression expr : filter.expressions)
                 size += Expression.serializer.serializedSize(expr, version);
             return size;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/649a106c/src/java/org/apache/cassandra/db/rows/EncodingStats.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/rows/EncodingStats.java 
b/src/java/org/apache/cassandra/db/rows/EncodingStats.java
index 2970fa3..955ffc7 100644
--- a/src/java/org/apache/cassandra/db/rows/EncodingStats.java
+++ b/src/java/org/apache/cassandra/db/rows/EncodingStats.java
@@ -230,23 +230,23 @@ public class EncodingStats
     {
         public void serialize(EncodingStats stats, DataOutputPlus out) throws 
IOException
         {
-            out.writeVInt(stats.minTimestamp - TIMESTAMP_EPOCH);
-            out.writeVInt(stats.minLocalDeletionTime - DELETION_TIME_EPOCH);
-            out.writeVInt(stats.minTTL - TTL_EPOCH);
+            out.writeUnsignedVInt(stats.minTimestamp - TIMESTAMP_EPOCH);
+            out.writeUnsignedVInt(stats.minLocalDeletionTime - 
DELETION_TIME_EPOCH);
+            out.writeUnsignedVInt(stats.minTTL - TTL_EPOCH);
         }
 
         public int serializedSize(EncodingStats stats)
         {
-            return TypeSizes.sizeofVInt(stats.minTimestamp - TIMESTAMP_EPOCH)
-                   + TypeSizes.sizeofVInt(stats.minLocalDeletionTime - 
DELETION_TIME_EPOCH)
-                   + TypeSizes.sizeofVInt(stats.minTTL - TTL_EPOCH);
+            return TypeSizes.sizeofUnsignedVInt(stats.minTimestamp - 
TIMESTAMP_EPOCH)
+                   + TypeSizes.sizeofUnsignedVInt(stats.minLocalDeletionTime - 
DELETION_TIME_EPOCH)
+                   + TypeSizes.sizeofUnsignedVInt(stats.minTTL - TTL_EPOCH);
         }
 
         public EncodingStats deserialize(DataInputPlus in) throws IOException
         {
-            long minTimestamp = in.readVInt() + TIMESTAMP_EPOCH;
-            int minLocalDeletionTime = (int)in.readVInt() + 
DELETION_TIME_EPOCH;
-            int minTTL = (int)in.readVInt() + TTL_EPOCH;
+            long minTimestamp = in.readUnsignedVInt() + TIMESTAMP_EPOCH;
+            int minLocalDeletionTime = (int)in.readUnsignedVInt() + 
DELETION_TIME_EPOCH;
+            int minTTL = (int)in.readUnsignedVInt() + TTL_EPOCH;
             return new EncodingStats(minTimestamp, minLocalDeletionTime, 
minTTL);
         }
     }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/649a106c/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 e1b2c09..df006d7 100644
--- a/src/java/org/apache/cassandra/db/rows/UnfilteredRowIteratorSerializer.java
+++ b/src/java/org/apache/cassandra/db/rows/UnfilteredRowIteratorSerializer.java
@@ -123,7 +123,7 @@ public class UnfilteredRowIteratorSerializer
             UnfilteredSerializer.serializer.serialize(staticRow, header, out, 
version);
 
         if (rowEstimate >= 0)
-            out.writeVInt(rowEstimate);
+            out.writeUnsignedVInt(rowEstimate);
 
         while (iterator.hasNext())
             UnfilteredSerializer.serializer.serialize(iterator.next(), header, 
out, version);
@@ -159,7 +159,7 @@ public class UnfilteredRowIteratorSerializer
             size += UnfilteredSerializer.serializer.serializedSize(staticRow, 
header, version);
 
         if (rowEstimate >= 0)
-            size += TypeSizes.sizeofVInt(rowEstimate);
+            size += TypeSizes.sizeofUnsignedVInt(rowEstimate);
 
         while (iterator.hasNext())
             size += 
UnfilteredSerializer.serializer.serializedSize(iterator.next(), header, 
version);
@@ -191,7 +191,7 @@ public class UnfilteredRowIteratorSerializer
         if (hasStatic)
             staticRow = 
UnfilteredSerializer.serializer.deserializeStaticRow(in, header, new 
SerializationHelper(metadata, version, flag));
 
-        int rowEstimate = hasRowEstimate ? (int)in.readVInt() : -1;
+        int rowEstimate = hasRowEstimate ? (int)in.readUnsignedVInt() : -1;
         return new Header(header, key, isReversed, false, partitionDeletion, 
staticRow, rowEstimate);
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/649a106c/src/java/org/apache/cassandra/hints/EncodedHintMessage.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/hints/EncodedHintMessage.java 
b/src/java/org/apache/cassandra/hints/EncodedHintMessage.java
index 56727fc..4fe05ac 100644
--- a/src/java/org/apache/cassandra/hints/EncodedHintMessage.java
+++ b/src/java/org/apache/cassandra/hints/EncodedHintMessage.java
@@ -66,7 +66,7 @@ final class EncodedHintMessage
                 throw new IllegalArgumentException("serializedSize() called 
with non-matching version " + version);
 
             long size = 
UUIDSerializer.serializer.serializedSize(message.hostId, version);
-            size += TypeSizes.sizeofVInt(message.hint.remaining());
+            size += TypeSizes.sizeofUnsignedVInt(message.hint.remaining());
             size += message.hint.remaining();
             return size;
         }
@@ -77,7 +77,7 @@ final class EncodedHintMessage
                 throw new IllegalArgumentException("serialize() called with 
non-matching version " + version);
 
             UUIDSerializer.serializer.serialize(message.hostId, out, version);
-            out.writeVInt(message.hint.remaining());
+            out.writeUnsignedVInt(message.hint.remaining());
             out.write(message.hint);
         }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/649a106c/src/java/org/apache/cassandra/hints/Hint.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/hints/Hint.java 
b/src/java/org/apache/cassandra/hints/Hint.java
index c88c494..cbb5e74 100644
--- a/src/java/org/apache/cassandra/hints/Hint.java
+++ b/src/java/org/apache/cassandra/hints/Hint.java
@@ -27,7 +27,7 @@ import org.apache.cassandra.io.util.DataInputPlus;
 import org.apache.cassandra.io.util.DataOutputPlus;
 
 import static org.apache.cassandra.db.TypeSizes.sizeof;
-import static org.apache.cassandra.db.TypeSizes.sizeofVInt;
+import static org.apache.cassandra.db.TypeSizes.sizeofUnsignedVInt;
 
 /**
  * Encapsulates the hinted mutation, its creation time, and the gc grace 
seconds param for each table involved.
@@ -111,7 +111,7 @@ public final class Hint
         public long serializedSize(Hint hint, int version)
         {
             long size = sizeof(hint.creationTime);
-            size += sizeofVInt(hint.gcgs);
+            size += sizeofUnsignedVInt(hint.gcgs);
             size += Mutation.serializer.serializedSize(hint.mutation, version);
             return size;
         }
@@ -119,14 +119,14 @@ public final class Hint
         public void serialize(Hint hint, DataOutputPlus out, int version) 
throws IOException
         {
             out.writeLong(hint.creationTime);
-            out.writeVInt(hint.gcgs);
+            out.writeUnsignedVInt(hint.gcgs);
             Mutation.serializer.serialize(hint.mutation, out, version);
         }
 
         public Hint deserialize(DataInputPlus in, int version) throws 
IOException
         {
             long creationTime = in.readLong();
-            int gcgs = (int) in.readVInt();
+            int gcgs = (int) in.readUnsignedVInt();
             return new Hint(Mutation.serializer.deserialize(in, version), 
creationTime, gcgs);
         }
     }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/649a106c/src/java/org/apache/cassandra/hints/HintMessage.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/hints/HintMessage.java 
b/src/java/org/apache/cassandra/hints/HintMessage.java
index 6296a8c..e78738d 100644
--- a/src/java/org/apache/cassandra/hints/HintMessage.java
+++ b/src/java/org/apache/cassandra/hints/HintMessage.java
@@ -86,7 +86,7 @@ public final class HintMessage
             long size = 
UUIDSerializer.serializer.serializedSize(message.hostId, version);
 
             long hintSize = Hint.serializer.serializedSize(message.hint, 
version);
-            size += TypeSizes.sizeofVInt(hintSize);
+            size += TypeSizes.sizeofUnsignedVInt(hintSize);
             size += hintSize;
 
             return size;
@@ -102,7 +102,7 @@ public final class HintMessage
              * We are serializing the hint size so that the receiver of the 
message could gracefully handle
              * deserialize failure when a table had been dropped, by simply 
skipping the unread bytes.
              */
-            out.writeVInt(Hint.serializer.serializedSize(message.hint, 
version));
+            out.writeUnsignedVInt(Hint.serializer.serializedSize(message.hint, 
version));
 
             Hint.serializer.serialize(message.hint, out, version);
         }
@@ -116,7 +116,7 @@ public final class HintMessage
         {
             UUID hostId = UUIDSerializer.serializer.deserialize(in, version);
 
-            long hintSize = in.readVInt();
+            long hintSize = in.readUnsignedVInt();
             BytesReadTracker countingIn = new BytesReadTracker(in);
             try
             {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/649a106c/src/java/org/apache/cassandra/io/util/DataOutputPlus.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/util/DataOutputPlus.java 
b/src/java/org/apache/cassandra/io/util/DataOutputPlus.java
index 60a5727..a9dbb68 100644
--- a/src/java/org/apache/cassandra/io/util/DataOutputPlus.java
+++ b/src/java/org/apache/cassandra/io/util/DataOutputPlus.java
@@ -49,11 +49,11 @@ public interface DataOutputPlus extends DataOutput
     }
 
     /**
-     * Think hard before opting for an unsigned encoding. Is this going to 
bite someone because some day
-     * they might need to pass in a sentinel value using negative numbers? Is 
the risk worth it
-     * to save a few bytes?
+     * This is more efficient for storing unsigned values, both in storage and 
CPU burden.
      *
-     * Signed, not a fan of unsigned values in protocols and formats
+     * Note that it is still possible to store negative values, they just take 
up more space.
+     * So this method doesn't forbid e.g. negative sentinel values in future, 
if they need to be snuck in.
+     * A protocol version bump can then be introduced to improve efficiency.
      */
     default void writeUnsignedVInt(long i) throws IOException
     {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/649a106c/src/java/org/apache/cassandra/utils/ByteBufferUtil.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/utils/ByteBufferUtil.java 
b/src/java/org/apache/cassandra/utils/ByteBufferUtil.java
index a05c3c8..70d4bd5 100644
--- a/src/java/org/apache/cassandra/utils/ByteBufferUtil.java
+++ b/src/java/org/apache/cassandra/utils/ByteBufferUtil.java
@@ -293,7 +293,7 @@ public class ByteBufferUtil
 
     public static void writeWithVIntLength(ByteBuffer bytes, DataOutputPlus 
out) throws IOException
     {
-        out.writeVInt(bytes.remaining());
+        out.writeUnsignedVInt(bytes.remaining());
         out.write(bytes);
     }
 
@@ -332,7 +332,7 @@ public class ByteBufferUtil
 
     public static ByteBuffer readWithVIntLength(DataInputPlus in) throws 
IOException
     {
-        int length = (int)in.readVInt();
+        int length = (int)in.readUnsignedVInt();
         if (length < 0)
             throw new IOException("Corrupt (negative) value length 
encountered");
 
@@ -348,12 +348,12 @@ public class ByteBufferUtil
     public static int serializedSizeWithVIntLength(ByteBuffer buffer)
     {
         int size = buffer.remaining();
-        return TypeSizes.sizeofVInt(size) + size;
+        return TypeSizes.sizeofUnsignedVInt(size) + size;
     }
 
     public static void skipWithVIntLength(DataInputPlus in) throws IOException
     {
-        int length = (int)in.readVInt();
+        int length = (int)in.readUnsignedVInt();
         if (length < 0)
             throw new IOException("Corrupt (negative) value length 
encountered");
 

Reply via email to