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

[1/3] cassandra git commit: Log warning on unrecognized table during message deser

Repository: cassandra
Updated Branches:
  refs/heads/trunk 7954965eb -> 6d5b0b45a


Log warning on unrecognized table during message deser

Patch by Tyler Hobbs; reviewed by Sylvain Lebresne for CASSANDRA-9136


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

Branch: refs/heads/trunk
Commit: 58de86bff5e9383b679d9bb48cc95ec444275ca7
Parents: 6ab0c30
Author: Tyler Hobbs <ty...@apache.org>
Authored: Thu May 7 10:30:01 2015 -0500
Committer: Tyler Hobbs <ty...@apache.org>
Committed: Thu May 7 10:30:01 2015 -0500

----------------------------------------------------------------------
 CHANGES.txt                                               |  2 ++
 src/java/org/apache/cassandra/db/PagedRangeCommand.java   | 10 ++++++++++
 src/java/org/apache/cassandra/db/RangeSliceCommand.java   |  7 +++++++
 .../org/apache/cassandra/db/SliceByNamesReadCommand.java  |  8 ++++++++
 .../org/apache/cassandra/db/SliceFromReadCommand.java     |  8 ++++++++
 5 files changed, 35 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/58de86bf/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index d76606c..8473777 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,6 @@
 2.0.15:
+ * Log warning message when a table is queried before the schema has fully
+   propagated (CASSANDRA-9136)
  * Overload SecondaryIndex#indexes to accept the column definition (CASSANDRA-9314)
  * (cqlsh) Add SERIAL and LOCAL_SERIAL consistency levels (CASSANDRA-8051)
  * Fix index selection during rebuild with certain table layouts (CASSANDRA-9281)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/58de86bf/src/java/org/apache/cassandra/db/PagedRangeCommand.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/PagedRangeCommand.java b/src/java/org/apache/cassandra/db/PagedRangeCommand.java
index a8d7f49..3bc6539 100644
--- a/src/java/org/apache/cassandra/db/PagedRangeCommand.java
+++ b/src/java/org/apache/cassandra/db/PagedRangeCommand.java
@@ -24,6 +24,7 @@ import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.cassandra.config.Schema;
 import org.apache.cassandra.db.filter.*;
 import org.apache.cassandra.dht.AbstractBounds;
 import org.apache.cassandra.io.IVersionedSerializer;
@@ -153,6 +154,15 @@ public class PagedRangeCommand extends AbstractRangeCommand
         {
             String keyspace = in.readUTF();
             String columnFamily = in.readUTF();
+
+            if (Schema.instance.getCFMetaData(keyspace, columnFamily) == null)
+            {
+                String message = String.format("Got paged range command for nonexistent table %s.%s.  If the table was just " +
+                        "created, this is likely due to the schema not being fully propagated.  Please wait for schema " +
+                        "agreement on table creation." , keyspace, columnFamily);
+                throw new UnknownColumnFamilyException(message, null);
+            }
+
             long timestamp = in.readLong();
 
             AbstractBounds<RowPosition> keyRange = AbstractBounds.serializer.deserialize(in, version).toRowBounds();

http://git-wip-us.apache.org/repos/asf/cassandra/blob/58de86bf/src/java/org/apache/cassandra/db/RangeSliceCommand.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/RangeSliceCommand.java b/src/java/org/apache/cassandra/db/RangeSliceCommand.java
index 4aa1595..553f111 100644
--- a/src/java/org/apache/cassandra/db/RangeSliceCommand.java
+++ b/src/java/org/apache/cassandra/db/RangeSliceCommand.java
@@ -213,6 +213,13 @@ class RangeSliceCommandSerializer implements IVersionedSerializer<RangeSliceComm
         long timestamp = version < MessagingService.VERSION_20 ? System.currentTimeMillis() : in.readLong();
 
         CFMetaData metadata = Schema.instance.getCFMetaData(keyspace, columnFamily);
+        if (metadata == null)
+        {
+            String message = String.format("Got range slice command for nonexistent table %s.%s.  If the table was just " +
+                    "created, this is likely due to the schema not being fully propagated.  Please wait for schema " +
+                    "agreement on table creation." , keyspace, columnFamily);
+            throw new UnknownColumnFamilyException(message, null);
+        }
 
         IDiskAtomFilter predicate;
         if (version < MessagingService.VERSION_20)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/58de86bf/src/java/org/apache/cassandra/db/SliceByNamesReadCommand.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/SliceByNamesReadCommand.java b/src/java/org/apache/cassandra/db/SliceByNamesReadCommand.java
index ae3db78..ec7c439 100644
--- a/src/java/org/apache/cassandra/db/SliceByNamesReadCommand.java
+++ b/src/java/org/apache/cassandra/db/SliceByNamesReadCommand.java
@@ -120,6 +120,14 @@ class SliceByNamesReadCommandSerializer implements IVersionedSerializer<ReadComm
         long timestamp = version < MessagingService.VERSION_20 ? System.currentTimeMillis() : in.readLong();
 
         CFMetaData metadata = Schema.instance.getCFMetaData(keyspaceName, cfName);
+        if (metadata == null)
+        {
+            String message = String.format("Got slice command for nonexistent table %s.%s.  If the table was just " +
+                    "created, this is likely due to the schema not being fully propagated.  Please wait for schema " +
+                    "agreement on table creation." , keyspaceName, cfName);
+            throw new UnknownColumnFamilyException(message, null);
+        }
+
         ReadCommand command;
         if (version < MessagingService.VERSION_20)
         {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/58de86bf/src/java/org/apache/cassandra/db/SliceFromReadCommand.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/SliceFromReadCommand.java b/src/java/org/apache/cassandra/db/SliceFromReadCommand.java
index 7526796..afca338 100644
--- a/src/java/org/apache/cassandra/db/SliceFromReadCommand.java
+++ b/src/java/org/apache/cassandra/db/SliceFromReadCommand.java
@@ -181,6 +181,14 @@ class SliceFromReadCommandSerializer implements IVersionedSerializer<ReadCommand
         long timestamp = version < MessagingService.VERSION_20 ? System.currentTimeMillis() : in.readLong();
 
         CFMetaData metadata = Schema.instance.getCFMetaData(keyspaceName, cfName);
+        if (metadata == null)
+        {
+            String message = String.format("Got slice command for nonexistent table %s.%s.  If the table was just " +
+                    "created, this is likely due to the schema not being fully propagated.  Please wait for schema " +
+                    "agreement on table creation." , keyspaceName, cfName);
+            throw new UnknownColumnFamilyException(message, null);
+        }
+
         SliceQueryFilter filter;
         if (version < MessagingService.VERSION_20)
         {


[3/3] cassandra git commit: Merge branch 'cassandra-2.1' into trunk

Posted by ty...@apache.org.
Merge branch 'cassandra-2.1' into trunk


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

Branch: refs/heads/trunk
Commit: 6d5b0b45ad86be7568ab15dc61c75fa50143082a
Parents: 7954965 049a965
Author: Tyler Hobbs <ty...@apache.org>
Authored: Thu May 7 10:32:26 2015 -0500
Committer: Tyler Hobbs <ty...@apache.org>
Committed: Thu May 7 10:32:26 2015 -0500

----------------------------------------------------------------------
 CHANGES.txt                                                   | 3 ++-
 src/java/org/apache/cassandra/db/PagedRangeCommand.java       | 7 +++++++
 src/java/org/apache/cassandra/db/RangeSliceCommand.java       | 7 +++++++
 src/java/org/apache/cassandra/db/SliceByNamesReadCommand.java | 7 +++++++
 src/java/org/apache/cassandra/db/SliceFromReadCommand.java    | 7 +++++++
 5 files changed, 30 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/6d5b0b45/CHANGES.txt
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6d5b0b45/src/java/org/apache/cassandra/db/PagedRangeCommand.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/PagedRangeCommand.java
index ab988f1,70325a8..402e711
--- a/src/java/org/apache/cassandra/db/PagedRangeCommand.java
+++ b/src/java/org/apache/cassandra/db/PagedRangeCommand.java
@@@ -159,10 -158,16 +159,17 @@@ public class PagedRangeCommand extends 
              String columnFamily = in.readUTF();
              long timestamp = in.readLong();
  
 -            AbstractBounds<RowPosition> keyRange = AbstractBounds.serializer.deserialize(in, version).toRowBounds();
 +            AbstractBounds<RowPosition> keyRange =
 +                    AbstractBounds.rowPositionSerializer.deserialize(in, MessagingService.globalPartitioner(), version);
  
              CFMetaData metadata = Schema.instance.getCFMetaData(keyspace, columnFamily);
+             if (metadata == null)
+             {
+                 String message = String.format("Got paged range command for nonexistent table %s.%s.  If the table was just " +
+                         "created, this is likely due to the schema not being fully propagated.  Please wait for schema " +
+                         "agreement on table creation." , keyspace, columnFamily);
+                 throw new UnknownColumnFamilyException(message, null);
+             }
  
              SliceQueryFilter predicate = metadata.comparator.sliceQueryFilterSerializer().deserialize(in, version);
  

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6d5b0b45/src/java/org/apache/cassandra/db/RangeSliceCommand.java
----------------------------------------------------------------------


[2/3] cassandra git commit: Merge branch 'cassandra-2.0' into cassandra-2.1

Posted by ty...@apache.org.
Merge branch 'cassandra-2.0' into cassandra-2.1


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

Branch: refs/heads/trunk
Commit: 049a965bf1e57d30cac13141bdf228268765ebeb
Parents: 2c8e810 58de86b
Author: Tyler Hobbs <ty...@apache.org>
Authored: Thu May 7 10:31:52 2015 -0500
Committer: Tyler Hobbs <ty...@apache.org>
Committed: Thu May 7 10:31:52 2015 -0500

----------------------------------------------------------------------
 CHANGES.txt                                                   | 3 ++-
 src/java/org/apache/cassandra/db/PagedRangeCommand.java       | 7 +++++++
 src/java/org/apache/cassandra/db/RangeSliceCommand.java       | 7 +++++++
 src/java/org/apache/cassandra/db/SliceByNamesReadCommand.java | 7 +++++++
 src/java/org/apache/cassandra/db/SliceFromReadCommand.java    | 7 +++++++
 5 files changed, 30 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/049a965b/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 41e0340,8473777..d512973
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,21 -1,6 +1,22 @@@
 -2.0.15:
 +2.1.6
 + * Improve sstable exclusion from partition tombstones (CASSANDRA-9298)
 + * Validate the indexed column rather than the cell's contents for 2i (CASSANDRA-9057)
 + * Add support for top-k custom 2i queries (CASSANDRA-8717)
 + * Fix error when dropping table during compaction (CASSANDRA-9251)
 + * cassandra-stress supports validation operations over user profiles (CASSANDRA-8773)
 + * Add support for rate limiting log messages (CASSANDRA-9029)
 + * Log the partition key with tombstone warnings (CASSANDRA-8561)
 + * Reduce runWithCompactionsDisabled poll interval to 1ms (CASSANDRA-9271)
 + * Fix PITR commitlog replay (CASSANDRA-9195)
 + * GCInspector logs very different times (CASSANDRA-9124)
 + * Fix deleting from an empty list (CASSANDRA-9198)
 + * Update tuple and collection types that use a user-defined type when that UDT
 +   is modified (CASSANDRA-9148, CASSANDRA-9192)
 + * Use higher timeout for prepair and snapshot in repair (CASSANDRA-9261)
 + * Fix anticompaction blocking ANTI_ENTROPY stage (CASSANDRA-9151)
 +Merged from 2.0:
- 2.0.15:
+  * Log warning message when a table is queried before the schema has fully
+    propagated (CASSANDRA-9136)
   * Overload SecondaryIndex#indexes to accept the column definition (CASSANDRA-9314)
   * (cqlsh) Add SERIAL and LOCAL_SERIAL consistency levels (CASSANDRA-8051)
   * Fix index selection during rebuild with certain table layouts (CASSANDRA-9281)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/049a965b/src/java/org/apache/cassandra/db/PagedRangeCommand.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/PagedRangeCommand.java
index 614f0f7,3bc6539..70325a8
--- a/src/java/org/apache/cassandra/db/PagedRangeCommand.java
+++ b/src/java/org/apache/cassandra/db/PagedRangeCommand.java
@@@ -156,16 -154,23 +156,23 @@@ public class PagedRangeCommand extends 
          {
              String keyspace = in.readUTF();
              String columnFamily = in.readUTF();
 +            long timestamp = in.readLong();
  
 -            if (Schema.instance.getCFMetaData(keyspace, columnFamily) == null)
 +            AbstractBounds<RowPosition> keyRange = AbstractBounds.serializer.deserialize(in, version).toRowBounds();
 +
 +            CFMetaData metadata = Schema.instance.getCFMetaData(keyspace, columnFamily);
++            if (metadata == null)
+             {
+                 String message = String.format("Got paged range command for nonexistent table %s.%s.  If the table was just " +
+                         "created, this is likely due to the schema not being fully propagated.  Please wait for schema " +
+                         "agreement on table creation." , keyspace, columnFamily);
+                 throw new UnknownColumnFamilyException(message, null);
+             }
  
 -            long timestamp = in.readLong();
 +            SliceQueryFilter predicate = metadata.comparator.sliceQueryFilterSerializer().deserialize(in, version);
  
 -            AbstractBounds<RowPosition> keyRange = AbstractBounds.serializer.deserialize(in, version).toRowBounds();
 -
 -            SliceQueryFilter predicate = SliceQueryFilter.serializer.deserialize(in, version);
 -
 -            ByteBuffer start = ByteBufferUtil.readWithShortLength(in);
 -            ByteBuffer stop = ByteBufferUtil.readWithShortLength(in);
 +            Composite start = metadata.comparator.serializer().deserialize(in);
 +            Composite stop =  metadata.comparator.serializer().deserialize(in);
  
              int filterCount = in.readInt();
              List<IndexExpression> rowFilter = new ArrayList<IndexExpression>(filterCount);

http://git-wip-us.apache.org/repos/asf/cassandra/blob/049a965b/src/java/org/apache/cassandra/db/RangeSliceCommand.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/RangeSliceCommand.java
index 4d2955b,553f111..a7da39f
--- a/src/java/org/apache/cassandra/db/RangeSliceCommand.java
+++ b/src/java/org/apache/cassandra/db/RangeSliceCommand.java
@@@ -182,11 -209,50 +182,18 @@@ class RangeSliceCommandSerializer imple
      {
          String keyspace = in.readUTF();
          String columnFamily = in.readUTF();
 -
 -        long timestamp = version < MessagingService.VERSION_20 ? System.currentTimeMillis() : in.readLong();
 +        long timestamp = in.readLong();
  
          CFMetaData metadata = Schema.instance.getCFMetaData(keyspace, columnFamily);
+         if (metadata == null)
+         {
+             String message = String.format("Got range slice command for nonexistent table %s.%s.  If the table was just " +
+                     "created, this is likely due to the schema not being fully propagated.  Please wait for schema " +
+                     "agreement on table creation." , keyspace, columnFamily);
+             throw new UnknownColumnFamilyException(message, null);
+         }
  
 -        IDiskAtomFilter predicate;
 -        if (version < MessagingService.VERSION_20)
 -        {
 -            int scLength = in.readInt();
 -            ByteBuffer superColumn = null;
 -            if (scLength > 0)
 -            {
 -                byte[] buf = new byte[scLength];
 -                in.readFully(buf);
 -                superColumn = ByteBuffer.wrap(buf);
 -            }
 -
 -            AbstractType<?> comparator;
 -            if (metadata.cfType == ColumnFamilyType.Super)
 -            {
 -                CompositeType type = (CompositeType)metadata.comparator;
 -                comparator = superColumn == null ? type.types.get(0) : type.types.get(1);
 -            }
 -            else
 -            {
 -                comparator = metadata.comparator;
 -            }
 -
 -            predicate = IDiskAtomFilter.Serializer.instance.deserialize(in, version, comparator);
 -
 -            if (metadata.cfType == ColumnFamilyType.Super)
 -                predicate = SuperColumns.fromSCFilter((CompositeType)metadata.comparator, superColumn, predicate);
 -        }
 -        else
 -        {
 -            predicate = IDiskAtomFilter.Serializer.instance.deserialize(in, version, metadata.comparator);
 -        }
 +        IDiskAtomFilter predicate = metadata.comparator.diskAtomFilterSerializer().deserialize(in, version);
  
          List<IndexExpression> rowFilter;
          int filterCount = in.readInt();

http://git-wip-us.apache.org/repos/asf/cassandra/blob/049a965b/src/java/org/apache/cassandra/db/SliceByNamesReadCommand.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/SliceByNamesReadCommand.java
index 22f795e,ec7c439..65eefaa
--- a/src/java/org/apache/cassandra/db/SliceByNamesReadCommand.java
+++ b/src/java/org/apache/cassandra/db/SliceByNamesReadCommand.java
@@@ -91,11 -103,64 +91,18 @@@ class SliceByNamesReadCommandSerialize
          boolean isDigest = in.readBoolean();
          String keyspaceName = in.readUTF();
          ByteBuffer key = ByteBufferUtil.readWithShortLength(in);
 -
 -        String cfName;
 -        ByteBuffer sc = null;
 -        if (version < MessagingService.VERSION_20)
 -        {
 -            QueryPath path = QueryPath.deserialize(in);
 -            cfName = path.columnFamilyName;
 -            sc = path.superColumnName;
 -        }
 -        else
 -        {
 -            cfName = in.readUTF();
 -        }
 -
 -        long timestamp = version < MessagingService.VERSION_20 ? System.currentTimeMillis() : in.readLong();
 -
 +        String cfName = in.readUTF();
 +        long timestamp = in.readLong();
          CFMetaData metadata = Schema.instance.getCFMetaData(keyspaceName, cfName);
+         if (metadata == null)
+         {
+             String message = String.format("Got slice command for nonexistent table %s.%s.  If the table was just " +
+                     "created, this is likely due to the schema not being fully propagated.  Please wait for schema " +
 -                    "agreement on table creation." , keyspaceName, cfName);
++                    "agreement on table creation.", keyspaceName, cfName);
+             throw new UnknownColumnFamilyException(message, null);
+         }
 -
 -        ReadCommand command;
 -        if (version < MessagingService.VERSION_20)
 -        {
 -            AbstractType<?> comparator;
 -            if (metadata.cfType == ColumnFamilyType.Super)
 -            {
 -                CompositeType type = (CompositeType)metadata.comparator;
 -                comparator = sc == null ? type.types.get(0) : type.types.get(1);
 -            }
 -            else
 -            {
 -                comparator = metadata.comparator;
 -            }
 -
 -            IDiskAtomFilter filter = NamesQueryFilter.serializer.deserialize(in, version, comparator);
 -
 -            if (metadata.cfType == ColumnFamilyType.Super)
 -                filter = SuperColumns.fromSCFilter((CompositeType)metadata.comparator, sc, filter);
 -
 -            // Due to SC compat, it's possible we get back a slice filter at this point
 -            if (filter instanceof NamesQueryFilter)
 -                command = new SliceByNamesReadCommand(keyspaceName, key, cfName, timestamp, (NamesQueryFilter)filter);
 -            else
 -                command = new SliceFromReadCommand(keyspaceName, key, cfName, timestamp, (SliceQueryFilter)filter);
 -        }
 -        else
 -        {
 -            NamesQueryFilter filter = NamesQueryFilter.serializer.deserialize(in, version, metadata.comparator);
 -            command = new SliceByNamesReadCommand(keyspaceName, key, cfName, timestamp, filter);
 -        }
 -
 -        command.setDigestQuery(isDigest);
 -        return command;
 +        NamesQueryFilter filter = metadata.comparator.namesQueryFilterSerializer().deserialize(in, version);
 +        return new SliceByNamesReadCommand(keyspaceName, key, cfName, timestamp, filter).setIsDigestQuery(isDigest);
      }
  
      public long serializedSize(ReadCommand cmd, int version)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/049a965b/src/java/org/apache/cassandra/db/SliceFromReadCommand.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/SliceFromReadCommand.java
index 2259f22,afca338..80a624d
--- a/src/java/org/apache/cassandra/db/SliceFromReadCommand.java
+++ b/src/java/org/apache/cassandra/db/SliceFromReadCommand.java
@@@ -145,11 -164,47 +145,18 @@@ class SliceFromReadCommandSerializer im
          boolean isDigest = in.readBoolean();
          String keyspaceName = in.readUTF();
          ByteBuffer key = ByteBufferUtil.readWithShortLength(in);
 -
 -        String cfName;
 -        ByteBuffer sc = null;
 -        if (version < MessagingService.VERSION_20)
 -        {
 -            QueryPath path = QueryPath.deserialize(in);
 -            cfName = path.columnFamilyName;
 -            sc = path.superColumnName;
 -        }
 -        else
 -        {
 -            cfName = in.readUTF();
 -        }
 -
 -        long timestamp = version < MessagingService.VERSION_20 ? System.currentTimeMillis() : in.readLong();
 -
 +        String cfName = in.readUTF();
 +        long timestamp = in.readLong();
          CFMetaData metadata = Schema.instance.getCFMetaData(keyspaceName, cfName);
+         if (metadata == null)
+         {
+             String message = String.format("Got slice command for nonexistent table %s.%s.  If the table was just " +
+                     "created, this is likely due to the schema not being fully propagated.  Please wait for schema " +
 -                    "agreement on table creation." , keyspaceName, cfName);
++                    "agreement on table creation.", keyspaceName, cfName);
+             throw new UnknownColumnFamilyException(message, null);
+         }
 -
 -        SliceQueryFilter filter;
 -        if (version < MessagingService.VERSION_20)
 -        {
 -            filter = SliceQueryFilter.serializer.deserialize(in, version);
 -
 -            if (metadata.cfType == ColumnFamilyType.Super)
 -                filter = SuperColumns.fromSCSliceFilter((CompositeType)metadata.comparator, sc, filter);
 -        }
 -        else
 -        {
 -            filter = SliceQueryFilter.serializer.deserialize(in, version);
 -        }
 -
 -        ReadCommand command = new SliceFromReadCommand(keyspaceName, key, cfName, timestamp, filter);
 -        command.setDigestQuery(isDigest);
 -        return command;
 +        SliceQueryFilter filter = metadata.comparator.sliceQueryFilterSerializer().deserialize(in, version);
 +        return new SliceFromReadCommand(keyspaceName, key, cfName, timestamp, filter).setIsDigestQuery(isDigest);
      }
  
      public long serializedSize(ReadCommand cmd, int version)