Updated Branches:
  refs/heads/trunk 19ce000b2 -> ad72c578e

make dataSize TypeSizes-independent, and remove 25% fudge factor in liveRatio 
usage
patch by jbellis; reviewed by Vijay for CASSANDRA-4215


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

Branch: refs/heads/trunk
Commit: ad72c578ea8daed05f987ae1933276fa4a8ea5bf
Parents: 6633eb4
Author: Jonathan Ellis <jbel...@apache.org>
Authored: Thu May 3 10:58:15 2012 -0500
Committer: Jonathan Ellis <jbel...@apache.org>
Committed: Mon May 14 23:05:05 2012 -0500

----------------------------------------------------------------------
 src/java/org/apache/cassandra/db/Column.java       |   22 +++++++-------
 src/java/org/apache/cassandra/db/ColumnFamily.java |    6 ++--
 .../org/apache/cassandra/db/CounterColumn.java     |   10 +++++-
 .../org/apache/cassandra/db/ExpiringColumn.java    |   20 ++++++++-----
 src/java/org/apache/cassandra/db/IColumn.java      |    3 +-
 src/java/org/apache/cassandra/db/Memtable.java     |    6 +---
 src/java/org/apache/cassandra/db/SuperColumn.java  |   22 +++++++-------
 7 files changed, 49 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/ad72c578/src/java/org/apache/cassandra/db/Column.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/Column.java 
b/src/java/org/apache/cassandra/db/Column.java
index c0c6dfb..9416fbb 100644
--- a/src/java/org/apache/cassandra/db/Column.java
+++ b/src/java/org/apache/cassandra/db/Column.java
@@ -124,7 +124,16 @@ public class Column implements IColumn
         return timestamp;
     }
 
-    public int dataSize(TypeSizes typeSizes)
+    public int dataSize()
+    {
+        return name().remaining() + value.remaining() + 
TypeSizes.NATIVE.sizeof(timestamp);
+    }
+
+    /*
+     * This returns the size of the column when serialized.
+     * @see com.facebook.infrastructure.db.IColumn#serializedSize()
+    */
+    public int serializedSize(TypeSizes sizes)
     {
         /*
          * Size of a column is =
@@ -136,16 +145,7 @@ public class Column implements IColumn
         */
         int nameSize = name.remaining();
         int valueSize = value.remaining();
-        return typeSizes.sizeof((short) nameSize) + nameSize + 1 + 
typeSizes.sizeof(timestamp) + typeSizes.sizeof(valueSize) + valueSize;
-    }
-
-    /*
-     * This returns the size of the column when serialized.
-     * @see com.facebook.infrastructure.db.IColumn#serializedSize()
-    */
-    public int serializedSize(TypeSizes typeSizes)
-    {
-        return dataSize(typeSizes);
+        return sizes.sizeof((short) nameSize) + nameSize + 1 + 
sizes.sizeof(timestamp) + sizes.sizeof(valueSize) + valueSize;
     }
 
     public int serializationFlags()

http://git-wip-us.apache.org/repos/asf/cassandra/blob/ad72c578/src/java/org/apache/cassandra/db/ColumnFamily.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ColumnFamily.java 
b/src/java/org/apache/cassandra/db/ColumnFamily.java
index d5c4c76..a9a8b0e 100644
--- a/src/java/org/apache/cassandra/db/ColumnFamily.java
+++ b/src/java/org/apache/cassandra/db/ColumnFamily.java
@@ -250,12 +250,12 @@ public class ColumnFamily extends AbstractColumnContainer 
implements IRowCacheEn
     }
 
     /** the size of user-provided data, not including internal overhead */
-    int dataSize(TypeSizes typeSizes)
+    int dataSize()
     {
-        int size = TypeSizes.NATIVE.sizeof(1L) + TypeSizes.NATIVE.sizeof(1); 
// tombstone tracking
+        int size = TypeSizes.NATIVE.sizeof(getMarkedForDeleteAt());
         for (IColumn column : columns)
         {
-            size += column.dataSize(typeSizes);
+            size += column.dataSize();
         }
         return size;
     }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/ad72c578/src/java/org/apache/cassandra/db/CounterColumn.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/CounterColumn.java 
b/src/java/org/apache/cassandra/db/CounterColumn.java
index d081959..acc2af0 100644
--- a/src/java/org/apache/cassandra/db/CounterColumn.java
+++ b/src/java/org/apache/cassandra/db/CounterColumn.java
@@ -93,13 +93,19 @@ public class CounterColumn extends Column
     }
 
     @Override
-    public int dataSize(TypeSizes typeSizes)
+    public int dataSize()
     {
         /*
          * A counter column adds to a Column :
          *  + 8 bytes for timestampOfLastDelete
          */
-        return super.dataSize(typeSizes) + 
typeSizes.sizeof(timestampOfLastDelete);
+        return super.dataSize() + 
TypeSizes.NATIVE.sizeof(timestampOfLastDelete);
+    }
+
+    @Override
+    public int serializedSize(TypeSizes sizes)
+    {
+        return super.serializedSize(sizes) + 
sizes.sizeof(timestampOfLastDelete);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cassandra/blob/ad72c578/src/java/org/apache/cassandra/db/ExpiringColumn.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ExpiringColumn.java 
b/src/java/org/apache/cassandra/db/ExpiringColumn.java
index f2f41b2..07a0064 100644
--- a/src/java/org/apache/cassandra/db/ExpiringColumn.java
+++ b/src/java/org/apache/cassandra/db/ExpiringColumn.java
@@ -74,14 +74,18 @@ public class ExpiringColumn extends Column
     }
 
     @Override
-    public int dataSize(TypeSizes typeSizes)
-    {
-        /*
-         * An expired column adds to a Column :
-         *    4 bytes for the localExpirationTime
-         *  + 4 bytes for the timeToLive
-        */
-        return super.dataSize(typeSizes) + 
typeSizes.sizeof(localExpirationTime) + typeSizes.sizeof(timeToLive);
+    public int dataSize()
+    {
+        return super.dataSize() + TypeSizes.NATIVE.sizeof(localExpirationTime) 
+ TypeSizes.NATIVE.sizeof(timeToLive);
+    }
+
+    @Override
+    public int serializedSize(TypeSizes sizes)
+    {
+        // An expired column adds to a Column :
+        //    4 bytes for the localExpirationTime
+        //  + 4 bytes for the timeToLive
+        return super.serializedSize(sizes) + sizes.sizeof(localExpirationTime) 
+ sizes.sizeof(timeToLive);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cassandra/blob/ad72c578/src/java/org/apache/cassandra/db/IColumn.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/IColumn.java 
b/src/java/org/apache/cassandra/db/IColumn.java
index 9d7279c..d195e68 100644
--- a/src/java/org/apache/cassandra/db/IColumn.java
+++ b/src/java/org/apache/cassandra/db/IColumn.java
@@ -42,7 +42,8 @@ public interface IColumn
     public long mostRecentLiveChangeAt();
     public long mostRecentNonGCableChangeAt(int gcbefore);
     public ByteBuffer name();
-    public int dataSize(TypeSizes typeSizes);
+    /** the size of user-provided data, not including internal overhead */
+    public int dataSize();
     public int serializedSize(TypeSizes typeSizes);
     public int serializationFlags();
     public long timestamp();

http://git-wip-us.apache.org/repos/asf/cassandra/blob/ad72c578/src/java/org/apache/cassandra/db/Memtable.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/Memtable.java 
b/src/java/org/apache/cassandra/db/Memtable.java
index 0d38160..884698b 100644
--- a/src/java/org/apache/cassandra/db/Memtable.java
+++ b/src/java/org/apache/cassandra/db/Memtable.java
@@ -119,9 +119,7 @@ public class Memtable
 
     public long getLiveSize()
     {
-        // 25% fudge factor on the base throughput * liveRatio calculation.  
(Based on observed
-        // pre-slabbing behavior -- not sure what accounts for this. May have 
changed with introduction of slabbing.)
-        return (long) (currentThroughput.get() * cfs.liveRatio * 1.25);
+        return (long) (currentThroughput.get() * cfs.liveRatio);
     }
 
     public long getSerializedSize()
@@ -225,7 +223,7 @@ public class Memtable
 
     private void resolve(DecoratedKey key, ColumnFamily cf)
     {
-        currentThroughput.addAndGet(cf.dataSize(TypeSizes.NATIVE));
+        currentThroughput.addAndGet(cf.dataSize());
         currentOperations.addAndGet((cf.getColumnCount() == 0)
                                     ? cf.isMarkedForDelete() ? 1 : 0
                                     : cf.getColumnCount());

http://git-wip-us.apache.org/repos/asf/cassandra/blob/ad72c578/src/java/org/apache/cassandra/db/SuperColumn.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/SuperColumn.java 
b/src/java/org/apache/cassandra/db/SuperColumn.java
index 9098446..06b2ed0 100644
--- a/src/java/org/apache/cassandra/db/SuperColumn.java
+++ b/src/java/org/apache/cassandra/db/SuperColumn.java
@@ -102,13 +102,11 @@ public class SuperColumn extends AbstractColumnContainer 
implements IColumn
     /**
      * This calculates the exact size of the sub columns on the fly
      */
-    public int dataSize(TypeSizes typeSizes)
+    public int dataSize()
     {
-        int size = 0;
+        int size = TypeSizes.NATIVE.sizeof(getMarkedForDeleteAt());
         for (IColumn subColumn : getSubColumns())
-        {
-            size += subColumn.serializedSize(typeSizes);
-        }
+            size += subColumn.dataSize();
         return size;
     }
 
@@ -116,7 +114,7 @@ public class SuperColumn extends AbstractColumnContainer 
implements IColumn
      * This returns the size of the super-column when serialized.
      * @see org.apache.cassandra.db.IColumn#serializedSize()
     */
-    public int serializedSize(TypeSizes typeSizes)
+    public int serializedSize(TypeSizes sizes)
     {
         /*
          * We need to keep the way we are calculating the column size in sync 
with the
@@ -130,11 +128,13 @@ public class SuperColumn extends AbstractColumnContainer 
implements IColumn
          * size(constantSize) of subcolumns.
          */
         int nameSize = name.remaining();
-        int subColumnsSize = dataSize(typeSizes);
-        return typeSizes.sizeof((short) nameSize) + nameSize
-                + typeSizes.sizeof(getLocalDeletionTime())
-                + typeSizes.sizeof(getMarkedForDeleteAt())
-                + typeSizes.sizeof(subColumnsSize) + subColumnsSize;
+        int subColumnsSize = 0;
+        for (IColumn subColumn : getSubColumns())
+            subColumnsSize += subColumn.serializedSize(sizes);
+        return sizes.sizeof((short) nameSize) + nameSize
+                + sizes.sizeof(getLocalDeletionTime())
+                + sizes.sizeof(getMarkedForDeleteAt())
+                + sizes.sizeof(subColumnsSize) + subColumnsSize;
     }
 
     public long timestamp()

Reply via email to