Repository: cassandra
Updated Branches:
  refs/heads/trunk e6505a606 -> 29d4a8297


SSTableWriter output discrepancy

patch by Stefania Alborghetti; reviewed by Alex Petrov for CASSANDRA-11646


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

Branch: refs/heads/trunk
Commit: 29d4a8297905463e4f0bb28fe0b4cc354dc1a0ab
Parents: e6505a6
Author: Stefania Alborghetti <[email protected]>
Authored: Tue Apr 26 16:56:07 2016 +0800
Committer: Stefania Alborghetti <[email protected]>
Committed: Wed Apr 27 09:20:28 2016 +0800

----------------------------------------------------------------------
 CHANGES.txt                                            |  1 +
 .../apache/cassandra/io/sstable/CQLSSTableWriter.java  | 13 ++++++++-----
 2 files changed, 9 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/29d4a829/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 34c432f..a10a895 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 3.6
+ * SSTableWriter output discrepancy (CASSANDRA-11646)
  * Fix potential timeout in NativeTransportService.testConcurrentDestroys 
(CASSANDRA-10756)
  * Support large partitions on the 3.0 sstable format (CASSANDRA-11206)
  * JSON datetime formatting needs timezone (CASSANDRA-11137)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/29d4a829/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java 
b/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java
index 2de89b1..2d9e379 100644
--- a/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java
+++ b/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java
@@ -27,6 +27,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.SortedSet;
+import java.util.stream.Collectors;
 
 import com.datastax.driver.core.ProtocolVersion;
 import com.datastax.driver.core.TypeCodec;
@@ -45,7 +46,6 @@ import org.apache.cassandra.cql3.statements.ParsedStatement;
 import org.apache.cassandra.cql3.statements.UpdateStatement;
 import org.apache.cassandra.db.Clustering;
 import org.apache.cassandra.db.DecoratedKey;
-import org.apache.cassandra.db.marshal.AbstractType;
 import org.apache.cassandra.db.marshal.UserType;
 import org.apache.cassandra.db.partitions.Partition;
 import org.apache.cassandra.dht.IPartitioner;
@@ -112,12 +112,15 @@ public class CQLSSTableWriter implements Closeable
     private final AbstractSSTableSimpleWriter writer;
     private final UpdateStatement insert;
     private final List<ColumnSpecification> boundNames;
+    private final List<TypeCodec> typeCodecs;
 
     private CQLSSTableWriter(AbstractSSTableSimpleWriter writer, 
UpdateStatement insert, List<ColumnSpecification> boundNames)
     {
         this.writer = writer;
         this.insert = insert;
         this.boundNames = boundNames;
+        this.typeCodecs = boundNames.stream().map(bn ->  
UDHelper.codecFor(UDHelper.driverType(bn.type)))
+                                             .collect(Collectors.toList());
     }
 
     /**
@@ -168,9 +171,8 @@ public class CQLSSTableWriter implements Closeable
 
         for (int i = 0; i < size; i++)
         {
-            TypeCodec typeCodec = 
UDHelper.codecFor(UDHelper.driverType(boundNames.get(i).type));
-            rawValues.add(values.get(i) == null ? null : 
typeCodec.serialize(values.get(i),
-                                                                             
ProtocolVersion.NEWEST_SUPPORTED));
+            Object value = values.get(i);
+            rawValues.add(value == null ? null : 
typeCodecs.get(i).serialize(value, ProtocolVersion.NEWEST_SUPPORTED));
         }
 
         return rawAddRow(rawValues);
@@ -205,7 +207,8 @@ public class CQLSSTableWriter implements Closeable
         {
             ColumnSpecification spec = boundNames.get(i);
             Object value = values.get(spec.name.toString());
-            rawValues.add(value == null ? null : ((AbstractType) 
spec.type).decompose(value));
+
+            rawValues.add(value == null ? null : 
typeCodecs.get(i).serialize(value, ProtocolVersion.NEWEST_SUPPORTED));
         }
         return rawAddRow(rawValues);
     }

Reply via email to