You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by bl...@apache.org on 2017/08/24 16:24:38 UTC
[8/8] cassandra git commit: Merge branch cassandra-3.11 into trunk
Merge branch cassandra-3.11 into trunk
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/4838e81a
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/4838e81a
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/4838e81a
Branch: refs/heads/trunk
Commit: 4838e81a64eb118d0f86463b61b43c450a199dc8
Parents: 41ef972 8d98a99
Author: Benjamin Lerer <b....@gmail.com>
Authored: Thu Aug 24 18:23:02 2017 +0200
Committer: Benjamin Lerer <b....@gmail.com>
Committed: Thu Aug 24 18:24:02 2017 +0200
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cassandra/db/SerializationHeader.java | 13 +-
.../db/rows/AbstractTypeVersionComparator.java | 121 ++++++++++++
src/java/org/apache/cassandra/db/rows/Row.java | 18 +-
src/java/org/apache/cassandra/db/rows/Rows.java | 20 +-
.../io/sstable/format/SSTableReader.java | 20 +-
.../org/apache/cassandra/cql3/CQLTester.java | 20 +-
.../cql3/validation/entities/UserTypesTest.java | 151 +++++++++++++++
.../rows/AbstractTypeVersionComparatorTest.java | 188 +++++++++++++++++++
9 files changed, 532 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/4838e81a/CHANGES.txt
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/4838e81a/src/java/org/apache/cassandra/db/SerializationHeader.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/SerializationHeader.java
index 1f937f8,ddf83b7..4266629
--- a/src/java/org/apache/cassandra/db/SerializationHeader.java
+++ b/src/java/org/apache/cassandra/db/SerializationHeader.java
@@@ -84,8 -84,9 +84,9 @@@ public class SerializationHeade
// our stats merging on the compacted files headers, which as we just said can be somewhat inaccurate,
// but rather on their stats stored in StatsMetadata that are fully accurate.
EncodingStats.Collector stats = new EncodingStats.Collector();
- PartitionColumns.Builder columns = PartitionColumns.builder();
- // We need to order the SSTables by descending generation to be sure that we use latest column definitions.
+ RegularAndStaticColumns.Builder columns = RegularAndStaticColumns.builder();
- for (SSTableReader sstable : sstables)
++ // We need to order the SSTables by descending generation to be sure that we use latest column metadata.
+ for (SSTableReader sstable : orderByDescendingGeneration(sstables))
{
stats.updateTimestamp(sstable.getMinTimestamp());
stats.updateLocalDeletionTime(sstable.getMinLocalDeletionTime());
@@@ -95,9 -99,19 +96,19 @@@
return new SerializationHeader(true, metadata, columns.build(), stats.get());
}
+ private static Collection<SSTableReader> orderByDescendingGeneration(Collection<SSTableReader> sstables)
+ {
+ if (sstables.size() < 2)
+ return sstables;
+
+ List<SSTableReader> readers = new ArrayList<>(sstables);
+ readers.sort(SSTableReader.generationReverseComparator);
+ return readers;
+ }
+
public SerializationHeader(boolean isForSSTable,
- CFMetaData metadata,
- PartitionColumns columns,
+ TableMetadata metadata,
+ RegularAndStaticColumns columns,
EncodingStats stats)
{
this(isForSSTable,
http://git-wip-us.apache.org/repos/asf/cassandra/blob/4838e81a/src/java/org/apache/cassandra/db/rows/Row.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/rows/Row.java
index 7449e51,60ee4d4..5999864
--- a/src/java/org/apache/cassandra/db/rows/Row.java
+++ b/src/java/org/apache/cassandra/db/rows/Row.java
@@@ -721,10 -721,25 +721,25 @@@ public interface Row extends Unfiltered
public void reduce(int idx, ColumnData data)
{
- column = data.column();
- if (useColumnDefinition(data.column()))
++ if (useColumnMetadata(data.column()))
+ column = data.column();
+
versions.add(data);
}
+ /**
- * Determines it the {@code ColumnDefinition} is the one that should be used.
- * @param dataColumn the {@code ColumnDefinition} to use.
- * @return {@code true} if the {@code ColumnDefinition} is the one that should be used, {@code false} otherwise.
++ * Determines it the {@code ColumnMetadata} is the one that should be used.
++ * @param dataColumn the {@code ColumnMetadata} to use.
++ * @return {@code true} if the {@code ColumnMetadata} is the one that should be used, {@code false} otherwise.
+ */
- private boolean useColumnDefinition(ColumnDefinition dataColumn)
++ private boolean useColumnMetadata(ColumnMetadata dataColumn)
+ {
+ if (column == null)
+ return true;
+
+ return AbstractTypeVersionComparator.INSTANCE.compare(column.type, dataColumn.type) < 0;
+ }
+
protected ColumnData getReduced()
{
if (column.isSimple())
http://git-wip-us.apache.org/repos/asf/cassandra/blob/4838e81a/src/java/org/apache/cassandra/db/rows/Rows.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/rows/Rows.java
index 8c7143a,3331506..79c46d0
--- a/src/java/org/apache/cassandra/db/rows/Rows.java
+++ b/src/java/org/apache/cassandra/db/rows/Rows.java
@@@ -297,7 -297,8 +297,7 @@@ public abstract class Row
int comparison = nexta == null ? 1 : nextb == null ? -1 : nexta.column.compareTo(nextb.column);
ColumnData cura = comparison <= 0 ? nexta : null;
ColumnData curb = comparison >= 0 ? nextb : null;
- ColumnMetadata column = (cura != null ? cura : curb).column;
- ColumnDefinition column = getColumnDefinition(cura, curb);
-
++ ColumnMetadata column = getColumnMetadata(cura, curb);
if (column.isSimple())
{
timeDelta = Math.min(timeDelta, Cells.reconcile((Cell) cura, (Cell) curb, deletion, builder, nowInSec));
@@@ -403,4 -404,22 +403,22 @@@
Row row = builder.build();
return row != null && !row.isEmpty() ? row : null;
}
+
+ /**
- * Returns the {@code ColumnDefinition} to use for merging the columns.
- * If the 2 column definitions are different the latest one will be returned.
++ * Returns the {@code ColumnMetadata} to use for merging the columns.
++ * If the 2 column metadata are different the latest one will be returned.
+ */
- private static ColumnDefinition getColumnDefinition(ColumnData cura, ColumnData curb)
++ private static ColumnMetadata getColumnMetadata(ColumnData cura, ColumnData curb)
+ {
+ if (cura == null)
+ return curb.column;
+
+ if (curb == null)
+ return cura.column;
+
+ if (AbstractTypeVersionComparator.INSTANCE.compare(cura.column.type, curb.column.type) >= 0)
+ return cura.column;
+
+ return curb.column;
+ }
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/4838e81a/src/java/org/apache/cassandra/io/sstable/format/SSTableReader.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/4838e81a/test/unit/org/apache/cassandra/cql3/CQLTester.java
----------------------------------------------------------------------
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org