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); }
