Merge branch 'cassandra-3.11' into trunk

* cassandra-3.11:
  Potential AssertionError during ReadRepair of range tombstone and partition 
deletions


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

Branch: refs/heads/trunk
Commit: 652d9f64f14d8375a8412561271a7abf27722f20
Parents: d2dcd7f ed9b04d
Author: Sylvain Lebresne <[email protected]>
Authored: Thu Aug 24 11:39:35 2017 +0200
Committer: Sylvain Lebresne <[email protected]>
Committed: Thu Aug 24 11:39:35 2017 +0200

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../org/apache/cassandra/db/ReadResponse.java   | 22 +++++
 .../db/partitions/AbstractBTreePartition.java   | 16 ++--
 .../db/partitions/PartitionUpdate.java          |  9 ++
 .../apache/cassandra/service/DataResolver.java  | 70 +++++++++++++--
 .../cassandra/service/DataResolverTest.java     | 91 +++++++++++++++++++-
 6 files changed, 193 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/652d9f64/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index d0ec78d,b22cb5e..e19e9dd
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -129,7 -6,9 +129,8 @@@
   * Duplicate the buffer before passing it to analyser in SASI operation 
(CASSANDRA-13512)
   * Properly evict pstmts from prepared statements cache (CASSANDRA-13641)
  Merged from 3.0:
+  * Potential AssertionError during ReadRepair of range tombstone and 
partition deletions (CASSANDRA-13719)
   * Don't let stress write warmup data if n=0 (CASSANDRA-13773)
 - * Gossip thread slows down when using batch commit log (CASSANDRA-12966)
   * Randomize batchlog endpoint selection with only 1 or 2 racks 
(CASSANDRA-12884)
   * Fix digest calculation for counter cells (CASSANDRA-13750)
   * Fix ColumnDefinition.cellValueType() for non-frozen collection and change 
SSTabledump to use type.toJSONString() (CASSANDRA-13573)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/652d9f64/src/java/org/apache/cassandra/db/ReadResponse.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/652d9f64/src/java/org/apache/cassandra/db/partitions/AbstractBTreePartition.java
----------------------------------------------------------------------
diff --cc 
src/java/org/apache/cassandra/db/partitions/AbstractBTreePartition.java
index d8f2856,90db062..d913cb3
--- a/src/java/org/apache/cassandra/db/partitions/AbstractBTreePartition.java
+++ b/src/java/org/apache/cassandra/db/partitions/AbstractBTreePartition.java
@@@ -94,10 -99,10 +94,10 @@@ public abstract class AbstractBTreePart
  
      public DeletionTime partitionLevelDeletion()
      {
-         return holder().deletionInfo.getPartitionDeletion();
+         return deletionInfo().getPartitionDeletion();
      }
  
 -    public PartitionColumns columns()
 +    public RegularAndStaticColumns columns()
      {
          return holder().columns;
      }
@@@ -317,16 -322,21 +317,20 @@@
      {
          StringBuilder sb = new StringBuilder();
  
-         sb.append(String.format("[%s] key=%s columns=%s",
-                                 metadata().toString(),
 -        sb.append(String.format("[%s.%s] key=%s partition_deletion=%s 
columns=%s",
 -                                metadata.ksName,
 -                                metadata.cfName,
 -                                
metadata.getKeyValidator().getString(partitionKey().getKey()),
++        sb.append(String.format("[%s] key=%s partition_deletion=%s 
columns=%s",
++                                metadata(),
 +                                
metadata().partitionKeyType.getString(partitionKey().getKey()),
+                                 partitionLevelDeletion(),
                                  columns()));
  
          if (staticRow() != Rows.EMPTY_STATIC_ROW)
-             sb.append("\n    ").append(staticRow().toString(metadata()));
 -            sb.append("\n    ").append(staticRow().toString(metadata, true));
++            sb.append("\n    ").append(staticRow().toString(metadata(), 
true));
  
-         for (Row row : this)
-             sb.append("\n    ").append(row.toString(metadata()));
+         try (UnfilteredRowIterator iter = unfilteredIterator())
+         {
+             while (iter.hasNext())
 -                sb.append("\n    ").append(iter.next().toString(metadata, 
true));
++                sb.append("\n    ").append(iter.next().toString(metadata(), 
true));
+         }
  
          return sb.toString();
      }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/652d9f64/src/java/org/apache/cassandra/db/partitions/PartitionUpdate.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/652d9f64/src/java/org/apache/cassandra/service/DataResolver.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/service/DataResolver.java
index d844ece,116dadd..78bbe16
--- a/src/java/org/apache/cassandra/service/DataResolver.java
+++ b/src/java/org/apache/cassandra/service/DataResolver.java
@@@ -289,6 -302,37 +302,37 @@@ public class DataResolver extends Respo
  
              public void onMergedRangeTombstoneMarkers(RangeTombstoneMarker 
merged, RangeTombstoneMarker[] versions)
              {
+                 try
+                 {
+                     // The code for merging range tombstones is a tad complex 
and we had the assertions there triggered
+                     // unexpectedly in a few occasions (CASSANDRA-13237, 
CASSANDRA-13719). It's hard to get insights
+                     // when that happen without more context that what the 
assertion errors give us however, hence the
+                     // catch here that basically gather as much as context as 
reasonable.
+                     internalOnMergedRangeTombstoneMarkers(merged, versions);
+                 }
+                 catch (AssertionError e)
+                 {
+                     // The following can be pretty verbose, but it's really 
only triggered if a bug happen, so we'd
+                     // rather get more info to debug than not.
 -                    CFMetaData table = command.metadata();
 -                    String details = String.format("Error merging RTs on 
%s.%s: merged=%s, versions=%s, sources={%s}, responses:%n %s",
 -                                                   table.ksName, table.cfName,
++                    TableMetadata table = command.metadata();
++                    String details = String.format("Error merging RTs on %s: 
merged=%s, versions=%s, sources={%s}, responses:%n %s",
++                                                   table,
+                                                    merged == null ? "null" : 
merged.toString(table),
+                                                    '[' + Joiner.on(", 
").join(Iterables.transform(Arrays.asList(versions), rt -> rt == null ? "null" 
: rt.toString(table))) + ']',
+                                                    Arrays.toString(sources),
+                                                    
makeResponsesDebugString());
+                     throw new AssertionError(details, e);
+                 }
+             }
+ 
+             private String makeResponsesDebugString()
+             {
+                 return Joiner.on(",\n")
+                              .join(Iterables.transform(getMessages(), m -> 
m.from + " => " + m.payload.toDebugString(command, partitionKey)));
+             }
+ 
+             private void 
internalOnMergedRangeTombstoneMarkers(RangeTombstoneMarker merged, 
RangeTombstoneMarker[] versions)
+             {
                  // The current deletion as of dealing with this marker.
                  DeletionTime currentDeletion = currentDeletion();
  

http://git-wip-us.apache.org/repos/asf/cassandra/blob/652d9f64/test/unit/org/apache/cassandra/service/DataResolverTest.java
----------------------------------------------------------------------


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to