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