You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ma...@apache.org on 2021/08/27 17:00:51 UTC

[cassandra] branch trunk updated (1b5545b -> 33979e3)

This is an automated email from the ASF dual-hosted git repository.

maedhroz pushed a change to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git.


    from 1b5545b  Merge branch 'cassandra-4.0' into trunk
     new 585bc69  Move RepairedDataInfo to the execution controller rather than the ReadCommand to avoid unintended sharing
     new 33979e3  Merge branch 'cassandra-4.0' into trunk

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 CHANGES.txt                                        |   1 +
 .../apache/cassandra/concurrent/SEPExecutor.java   |   1 +
 .../cassandra/db/PartitionRangeReadCommand.java    |  14 +-
 src/java/org/apache/cassandra/db/ReadCommand.java  | 138 ++++---------
 .../cassandra/db/ReadCommandVerbHandler.java       |  11 +-
 .../cassandra/db/ReadExecutionController.java      |  75 ++++++--
 src/java/org/apache/cassandra/db/ReadResponse.java |   9 +-
 .../org/apache/cassandra/db/RepairedDataInfo.java  |  47 ++++-
 .../cassandra/db/SinglePartitionReadCommand.java   |  95 +++++----
 .../org/apache/cassandra/service/StorageProxy.java |  17 +-
 .../service/reads/AbstractReadExecutor.java        |   2 +-
 .../cassandra/service/reads/DataResolver.java      |   9 +-
 .../service/reads/range/RangeCommandIterator.java  |  19 +-
 .../service/reads/repair/AbstractReadRepair.java   |  57 +++---
 .../distributed/test/RepairDigestTrackingTest.java | 157 +++++++++++++--
 test/unit/org/apache/cassandra/Util.java           |  40 +++-
 .../org/apache/cassandra/db/PartitionTest.java     |   9 +-
 .../org/apache/cassandra/db/ReadCommandTest.java   | 214 +++++++++++----------
 .../cassandra/db/ReadCommandVerbHandlerTest.java   |  71 ++++---
 .../org/apache/cassandra/db/ReadResponseTest.java  |  89 +++++----
 .../db/SSTableAndMemTableDigestMatchTest.java      |   4 +-
 .../db/SinglePartitionSliceCommandTest.java        |   6 +-
 .../cassandra/db/compaction/CompactionsTest.java   |   5 -
 .../cassandra/service/reads/DataResolverTest.java  |   3 +-
 .../reads/repair/AbstractReadRepairTest.java       |   2 +-
 .../reads/repair/BlockingReadRepairTest.java       |   2 +-
 .../repair/DiagEventsBlockingReadRepairTest.java   |   3 +-
 .../reads/repair/ReadOnlyReadRepairTest.java       |   2 +-
 28 files changed, 669 insertions(+), 433 deletions(-)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org


[cassandra] 01/01: Merge branch 'cassandra-4.0' into trunk

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

maedhroz pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit 33979e3c916b2006e75a042fa4c806364dbbe5c1
Merge: 1b5545b 585bc69
Author: Caleb Rackliffe <ca...@gmail.com>
AuthorDate: Fri Aug 27 11:54:28 2021 -0500

    Merge branch 'cassandra-4.0' into trunk

 CHANGES.txt                                        |   1 +
 .../apache/cassandra/concurrent/SEPExecutor.java   |   1 +
 .../cassandra/db/PartitionRangeReadCommand.java    |  14 +-
 src/java/org/apache/cassandra/db/ReadCommand.java  | 138 ++++---------
 .../cassandra/db/ReadCommandVerbHandler.java       |  11 +-
 .../cassandra/db/ReadExecutionController.java      |  75 ++++++--
 src/java/org/apache/cassandra/db/ReadResponse.java |   9 +-
 .../org/apache/cassandra/db/RepairedDataInfo.java  |  47 ++++-
 .../cassandra/db/SinglePartitionReadCommand.java   |  95 +++++----
 .../org/apache/cassandra/service/StorageProxy.java |  17 +-
 .../service/reads/AbstractReadExecutor.java        |   2 +-
 .../cassandra/service/reads/DataResolver.java      |   9 +-
 .../service/reads/range/RangeCommandIterator.java  |  19 +-
 .../service/reads/repair/AbstractReadRepair.java   |  57 +++---
 .../distributed/test/RepairDigestTrackingTest.java | 157 +++++++++++++--
 test/unit/org/apache/cassandra/Util.java           |  40 +++-
 .../org/apache/cassandra/db/PartitionTest.java     |   9 +-
 .../org/apache/cassandra/db/ReadCommandTest.java   | 214 +++++++++++----------
 .../cassandra/db/ReadCommandVerbHandlerTest.java   |  71 ++++---
 .../org/apache/cassandra/db/ReadResponseTest.java  |  89 +++++----
 .../db/SSTableAndMemTableDigestMatchTest.java      |   4 +-
 .../db/SinglePartitionSliceCommandTest.java        |   6 +-
 .../cassandra/db/compaction/CompactionsTest.java   |   5 -
 .../cassandra/service/reads/DataResolverTest.java  |   3 +-
 .../reads/repair/AbstractReadRepairTest.java       |   2 +-
 .../reads/repair/BlockingReadRepairTest.java       |   2 +-
 .../repair/DiagEventsBlockingReadRepairTest.java   |   3 +-
 .../reads/repair/ReadOnlyReadRepairTest.java       |   2 +-
 28 files changed, 669 insertions(+), 433 deletions(-)

diff --cc CHANGES.txt
index 4f63c3d,22818c9..23ed6b1
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,24 -1,5 +1,25 @@@
 -4.0.1
 +4.1
 + * Add client warnings and abort to tombstone and coordinator reads which go past a low/high watermark (CASSANDRA-16850)
 + * Add TTL support to nodetool snapshots (CASSANDRA-16789)
 + * Allow CommitLogSegmentReader to optionally skip sync marker CRC checks (CASSANDRA-16842)
 + * allow blocking IPs from updating metrics about traffic (CASSANDRA-16859)
 + * Request-Based Native Transport Rate-Limiting (CASSANDRA-16663)
 + * Implement nodetool getauditlog command (CASSANDRA-16725)
 + * Clean up repair code (CASSANDRA-13720)
 + * Background schedule to clean up orphaned hints files (CASSANDRA-16815)
 + * Modify SecondaryIndexManager#indexPartition() to retrieve only columns for which indexes are actually being built (CASSANDRA-16776)
 + * Batch the token metadata update to improve the speed (CASSANDRA-15291)
 + * Reduce the log level on "expected" repair exceptions (CASSANDRA-16775)
 + * Make JMXTimer expose attributes using consistent time unit (CASSANDRA-16760)
 + * Remove check on gossip status from DynamicEndpointSnitch::updateScores (CASSANDRA-11671)
 + * Fix AbstractReadQuery::toCQLString not returning valid CQL (CASSANDRA-16510)
 + * Log when compacting many tombstones (CASSANDRA-16780)
 + * Display bytes per level in tablestats for LCS tables (CASSANDRA-16799)
 + * Add isolated flush timer to CommitLogMetrics and ensure writes correspond to single WaitingOnCommit data points (CASSANDRA-16701)
 + * Add a system property to set hostId if not yet initialized (CASSANDRA-14582)
 + * GossiperTest.testHasVersion3Nodes didn't take into account trunk version changes, fixed to rely on latest version (CASSANDRA-16651)
 +Merged from 4.0:
+  * Move RepairedDataInfo to the execution controller rather than the ReadCommand to avoid unintended sharing (CASSANDRA-16721)
   * Bump zstd-jni version to 1.5.0-4 (CASSANDRA-16884)
   * Remove assumption that all urgent messages are small (CASSANDRA-16877)
   * ArrayClustering.unsharedHeapSize does not include the data so undercounts the heap size (CASSANDRA-16845)
diff --cc src/java/org/apache/cassandra/db/ReadCommand.java
index 42206e1,d3aef4c..f029bac
--- a/src/java/org/apache/cassandra/db/ReadCommand.java
+++ b/src/java/org/apache/cassandra/db/ReadCommand.java
@@@ -93,15 -91,6 +93,8 @@@ public abstract class ReadCommand exten
      // if a digest query, the version for which the digest is expected. Ignored if not a digest.
      private int digestVersion;
  
-     // for data queries, coordinators may request information on the repaired data used in constructing the response
-     private boolean trackRepairedStatus = false;
-     // tracker for repaired data, initialized to singleton null object
-     private RepairedDataInfo repairedDataInfo = RepairedDataInfo.NULL_REPAIRED_DATA_INFO;
- 
-     int oldestUnrepairedTombstone = Integer.MAX_VALUE;
- 
 +    private boolean trackWarnings;
 +
      @Nullable
      private final IndexMetadata index;
  
@@@ -224,79 -211,6 +217,17 @@@
          return acceptsTransient;
      }
  
-     /**
-      * Activates repaired data tracking for this command.
-      *
-      * When active, a digest will be created from data read from repaired SSTables. The digests
-      * from each replica can then be compared on the coordinator to detect any divergence in their
-      * repaired datasets. In this context, an sstable is considered repaired if it is marked
-      * repaired or has a pending repair session which has been committed.
-      * In addition to the digest, a set of ids for any pending but as yet uncommitted repair sessions
-      * is recorded and returned to the coordinator. This is to help reduce false positives caused
-      * by compaction lagging which can leave sstables from committed sessions in the pending state
-      * for a time.
-      */
-     public void trackRepairedStatus()
-     {
-         trackRepairedStatus = true;
-     }
- 
-     /**
-      * Whether or not repaired status of any data read is being tracked or not
-      *
-      * @return Whether repaired status tracking is active for this command
-      */
-     public boolean isTrackingRepairedStatus()
-     {
-         return trackRepairedStatus;
-     }
- 
-     /**
-      * Returns a digest of the repaired data read in the execution of this command.
-      *
-      * If either repaired status tracking is not active or the command has not yet been
-      * executed, then this digest will be an empty buffer.
-      * Otherwise, it will contain a digest* of the repaired data read, or empty buffer
-      * if no repaired data was read.
-      * @return digest of the repaired data read in the execution of the command
-      */
-     public ByteBuffer getRepairedDataDigest()
-     {
-         return repairedDataInfo.getDigest();
-     }
- 
-     /**
-      * Returns a boolean indicating whether any relevant sstables were skipped during the read
-      * that produced the repaired data digest.
-      *
-      * If true, then no pending repair sessions or partition deletes have influenced the extent
-      * of the repaired sstables that went into generating the digest.
-      * This indicates whether or not the digest can reliably be used to infer consistency
-      * issues between the repaired sets across replicas.
-      *
-      * If either repaired status tracking is not active or the command has not yet been
-      * executed, then this will always return true.
-      *
-      * @return boolean to indicate confidence in the dwhether or not the digest of the repaired data can be
-      * reliably be used to infer inconsistency issues between the repaired sets across
-      * replicas.
-      */
-     public boolean isRepairedDataDigestConclusive()
-     {
-         return repairedDataInfo.isConclusive();
-     }
- 
 +    @Override
 +    public void trackWarnings()
 +    {
 +        trackWarnings = true;
 +    }
 +
 +    public boolean isTrackingWarnings()
 +    {
 +        return trackWarnings;
 +    }
 +
      /**
       * Index (metadata) chosen for this query. Can be null.
       *
@@@ -395,10 -304,10 +321,20 @@@
          iterator = RTBoundValidator.validate(iterator, Stage.PROCESSED, true);
  
          return isDigestQuery()
-              ? ReadResponse.createDigestResponse(iterator, this)
-              : ReadResponse.createDataResponse(iterator, this);
+                ? ReadResponse.createDigestResponse(iterator, this)
+                : ReadResponse.createDataResponse(iterator, this, rdi);
+     }
+ 
++    @SuppressWarnings("resource") // We don't need to close an empty iterator.
++    public ReadResponse createEmptyResponse()
++    {
++        UnfilteredPartitionIterator iterator = EmptyIterators.unfilteredPartition(metadata());
++        
++        return isDigestQuery()
++               ? ReadResponse.createDigestResponse(iterator, this)
++               : ReadResponse.createDataResponse(iterator, this, RepairedDataInfo.NO_OP_REPAIRED_DATA_INFO);
 +    }
 +
      long indexSerializedSize(int version)
      {
          return null != index
diff --cc src/java/org/apache/cassandra/db/ReadCommandVerbHandler.java
index 2260fde,a86852f..7ed092a
--- a/src/java/org/apache/cassandra/db/ReadCommandVerbHandler.java
+++ b/src/java/org/apache/cassandra/db/ReadCommandVerbHandler.java
@@@ -53,33 -52,12 +53,30 @@@ public class ReadCommandVerbHandler imp
          long timeout = message.expiresAtNanos() - message.createdAtNanos();
          command.setMonitoringTime(message.createdAtNanos(), message.isCrossNode(), timeout, DatabaseDescriptor.getSlowQueryTimeout(NANOSECONDS));
  
 +        if (message.trackWarnings())
 +            command.trackWarnings();
 +
-         if (message.trackRepairedData())
-             command.trackRepairedStatus();
- 
          ReadResponse response;
-         try (ReadExecutionController executionController = command.executionController();
-              UnfilteredPartitionIterator iterator = command.executeLocally(executionController))
+         try (ReadExecutionController controller = command.executionController(message.trackRepairedData());
+              UnfilteredPartitionIterator iterator = command.executeLocally(controller))
          {
-             response = command.createResponse(iterator);
+             response = command.createResponse(iterator, controller.getRepairedDataInfo());
          }
 +        catch (RejectException e)
 +        {
 +            if (!command.isTrackingWarnings())
 +                throw e;
 +
 +            // make sure to log as the exception is swallowed
 +            logger.error(e.getMessage());
 +
-             response = command.createResponse(EmptyIterators.unfilteredPartition(command.metadata()));
++            response = command.createEmptyResponse();
 +            Message<ReadResponse> reply = message.responseWith(response);
 +            reply = MessageParams.addToMessage(reply);
 +
 +            MessagingService.instance().send(reply, message.from());
 +            return;
 +        }
  
          if (!command.complete())
          {
diff --cc src/java/org/apache/cassandra/service/StorageProxy.java
index 1387ce3,41e0404..e1dd8ac
--- a/src/java/org/apache/cassandra/service/StorageProxy.java
+++ b/src/java/org/apache/cassandra/service/StorageProxy.java
@@@ -57,10 -56,8 +57,9 @@@ import org.apache.cassandra.db.RejectEx
  import org.apache.cassandra.db.ConsistencyLevel;
  import org.apache.cassandra.db.CounterMutation;
  import org.apache.cassandra.db.DecoratedKey;
- import org.apache.cassandra.db.EmptyIterators;
  import org.apache.cassandra.db.IMutation;
  import org.apache.cassandra.db.Keyspace;
 +import org.apache.cassandra.db.MessageParams;
  import org.apache.cassandra.db.Mutation;
  import org.apache.cassandra.db.PartitionRangeReadCommand;
  import org.apache.cassandra.db.ReadCommand;
@@@ -2014,18 -1990,11 +2020,19 @@@ public class StorageProxy implements St
                  command.setMonitoringTime(approxCreationTimeNanos, false, verb.expiresAfterNanos(), DatabaseDescriptor.getSlowQueryTimeout(NANOSECONDS));
  
                  ReadResponse response;
-                 try (ReadExecutionController executionController = command.executionController();
-                      UnfilteredPartitionIterator iterator = command.executeLocally(executionController))
+                 try (ReadExecutionController controller = command.executionController(trackRepairedStatus);
+                      UnfilteredPartitionIterator iterator = command.executeLocally(controller))
                  {
-                     response = command.createResponse(iterator);
+                     response = command.createResponse(iterator, controller.getRepairedDataInfo());
                  }
 +                catch (RejectException e)
 +                {
 +                    if (!command.isTrackingWarnings())
 +                        throw e;
-                     response = command.createResponse(EmptyIterators.unfilteredPartition(command.metadata()));
++                    
++                    response = command.createEmptyResponse();
 +                    readRejected = true;
 +                }
  
                  if (command.complete())
                  {
diff --cc test/distributed/org/apache/cassandra/distributed/test/RepairDigestTrackingTest.java
index 0badb89,c8fc088..c5e0348
--- a/test/distributed/org/apache/cassandra/distributed/test/RepairDigestTrackingTest.java
+++ b/test/distributed/org/apache/cassandra/distributed/test/RepairDigestTrackingTest.java
@@@ -19,9 -19,9 +19,13 @@@
  package org.apache.cassandra.distributed.test;
  
  import java.io.IOException;
 -import java.util.*;
++import java.util.Collections;
 +import java.util.EnumSet;
 +import java.util.Iterator;
++import java.util.List;
 +import java.util.Map;
+ import java.util.concurrent.Callable;
+ import java.util.concurrent.CyclicBarrier;
  import java.util.concurrent.TimeUnit;
  import java.util.stream.IntStream;
  import java.util.stream.Stream;
diff --cc test/unit/org/apache/cassandra/db/ReadCommandTest.java
index dcd6331,8eec769..52a92b4
--- a/test/unit/org/apache/cassandra/db/ReadCommandTest.java
+++ b/test/unit/org/apache/cassandra/db/ReadCommandTest.java
@@@ -85,6 -84,6 +84,7 @@@ import org.apache.cassandra.utils.UUIDG
  import static org.apache.cassandra.utils.ByteBufferUtil.EMPTY_BYTE_BUFFER;
  import static org.junit.Assert.assertEquals;
  import static org.junit.Assert.assertFalse;
++import static org.junit.Assert.assertNotEquals;
  import static org.junit.Assert.assertTrue;
  import static org.junit.Assert.fail;
  
@@@ -234,7 -233,7 +234,7 @@@ public class ReadCommandTes
      }
  
      @Test
--    public void testSinglePartitionSliceAbort() throws Exception
++    public void testSinglePartitionSliceAbort()
      {
          ColumnFamilyStore cfs = Keyspace.open(KEYSPACE).getColumnFamilyStore(CF2);
  
@@@ -265,7 -264,7 +265,7 @@@
      }
  
      @Test
--    public void testSinglePartitionNamesAbort() throws Exception
++    public void testSinglePartitionNamesAbort()
      {
          ColumnFamilyStore cfs = Keyspace.open(KEYSPACE).getColumnFamilyStore(CF2);
  
@@@ -672,7 -671,7 +672,7 @@@
          cfs.forceBlockingFlush();
          List<SSTableReader> sstables = new ArrayList<>(cfs.getLiveSSTables());
          assertEquals(2, sstables.size());
--        Collections.sort(sstables, SSTableReader.maxTimestampDescending);
++        sstables.sort(SSTableReader.maxTimestampDescending);
  
          ReadCommand readCommand = Util.cmd(cfs, Util.dk("key")).includeRow("dd").columns("a").build();
  
@@@ -691,7 -689,7 +690,7 @@@
      }
  
      @Test
--    public void dontIncludeLegacyCounterContextInDigest() throws IOException
++    public void dontIncludeLegacyCounterContextInDigest()
      {
          // Serializations of a CounterContext containing legacy (pre-2.1) shards
          // can legitimately differ across replicas. For this reason, the context
@@@ -715,7 -713,7 +714,7 @@@
          // execute a read and capture the digest
          ReadCommand readCommand = Util.cmd(cfs, Util.dk("key")).build();
          ByteBuffer digestWithLegacyCounter0 = performReadAndVerifyRepairedInfo(readCommand, 1, 1, true);
--        assertFalse(EMPTY_BYTE_BUFFER.equals(digestWithLegacyCounter0));
++        assertNotEquals(EMPTY_BYTE_BUFFER, digestWithLegacyCounter0);
  
          // truncate, then re-insert the same partition, but this time with a legacy
          // shard having the value 1. The repaired digest should match the previous, as
@@@ -745,9 -743,9 +744,9 @@@
          cfs.getLiveSSTables().forEach(sstable -> mutateRepaired(cfs, sstable, 111, null));
  
          ByteBuffer digestWithCounterCell = performReadAndVerifyRepairedInfo(readCommand, 1, 1, true);
--        assertFalse(EMPTY_BYTE_BUFFER.equals(digestWithCounterCell));
--        assertFalse(digestWithLegacyCounter0.equals(digestWithCounterCell));
--        assertFalse(digestWithLegacyCounter1.equals(digestWithCounterCell));
++        assertNotEquals(EMPTY_BYTE_BUFFER, digestWithCounterCell);
++        assertNotEquals(digestWithLegacyCounter0, digestWithCounterCell);
++        assertNotEquals(digestWithLegacyCounter1, digestWithCounterCell);
      }
  
      /**
@@@ -758,7 -756,7 +757,7 @@@
       * Also, neither digest should be empty as the partition is not made empty by the purging.
       */
      @Test
--    public void purgeGCableTombstonesBeforeCalculatingDigest() throws Exception
++    public void purgeGCableTombstonesBeforeCalculatingDigest()
      {
          ColumnFamilyStore cfs = Keyspace.open(KEYSPACE).getColumnFamilyStore(CF8);
          cfs.truncateBlocking();
@@@ -767,7 -765,7 +766,6 @@@
  
          DecoratedKey[] keys = new DecoratedKey[] { Util.dk("key0"), Util.dk("key1"), Util.dk("key2"), Util.dk("key3") };
          int nowInSec = FBUtilities.nowInSeconds();
--        TableMetadata cfm = cfs.metadata();
  
          // A simple tombstone
          new RowUpdateBuilder(cfs.metadata(), 0, keys[0]).clustering("cc").delete("a").build().apply();
@@@ -974,7 -975,7 +975,7 @@@
       * the row deletion is eligible for purging, both the result set and the repaired data digest should
       * be empty.
       */
--    private void fullyPurgedPartitionCreatesEmptyDigest(ColumnFamilyStore cfs, ReadCommand command) throws Exception
++    private void fullyPurgedPartitionCreatesEmptyDigest(ColumnFamilyStore cfs, ReadCommand command)
      {
          cfs.truncateBlocking();
          cfs.disableAutoCompaction();
@@@ -1056,7 -1067,7 +1067,7 @@@
      }
  
      @Test
--    public void purgingConsidersRepairedDataOnly() throws Exception
++    public void purgingConsidersRepairedDataOnly()
      {
          // 2 sstables, first is repaired and contains data that is all purgeable
          // the second is unrepaired and contains non-purgable data. Even though
@@@ -1175,7 -1191,7 +1191,7 @@@
                                                             ReplicaUtils.full(addr, token)));
      }
  
--    private void testRepairedDataTracking(ColumnFamilyStore cfs, ReadCommand readCommand) throws IOException
++    private void testRepairedDataTracking(ColumnFamilyStore cfs, ReadCommand readCommand)
      {
          cfs.truncateBlocking();
          cfs.disableAutoCompaction();
diff --cc test/unit/org/apache/cassandra/db/ReadCommandVerbHandlerTest.java
index 47b2417,44c065a..5cdaa58
--- a/test/unit/org/apache/cassandra/db/ReadCommandVerbHandlerTest.java
+++ b/test/unit/org/apache/cassandra/db/ReadCommandVerbHandlerTest.java
@@@ -154,20 -154,36 +154,37 @@@ public class ReadCommandVerbHandlerTes
          }
      }
  
-     private static SinglePartitionReadCommand command(TableMetadata metadata)
+     private static class TrackingSinglePartitionReadCommand extends SinglePartitionReadCommand
      {
-         return new SinglePartitionReadCommand(false,
-                                               0,
-                                               false,
-                                               metadata,
-                                               FBUtilities.nowInSeconds(),
-                                               ColumnFilter.all(metadata),
-                                               RowFilter.NONE,
-                                               DataLimits.NONE,
-                                               KEY,
-                                               new ClusteringIndexSliceFilter(Slices.ALL, false),
-                                               null,
-                                               false);
+         private boolean trackingRepairedData = false;
+         
+         TrackingSinglePartitionReadCommand(TableMetadata metadata)
+         {
+             super(false,
+                   0,
+                   false,
+                   metadata,
+                   FBUtilities.nowInSeconds(),
+                   ColumnFilter.all(metadata),
+                   RowFilter.NONE,
+                   DataLimits.NONE,
+                   KEY,
+                   new ClusteringIndexSliceFilter(Slices.ALL, false),
 -                  null);
++                  null,
++                  false);
+         }
+ 
+         @Override
+         public UnfilteredPartitionIterator executeLocally(ReadExecutionController executionController)
+         {
+             trackingRepairedData = executionController.isTrackingRepairedStatus();
+             return super.executeLocally(executionController);
+         }
+ 
+         public boolean isTrackingRepairedData()
+         {
+             return trackingRepairedData;
+         }
      }
  
      private static DecoratedKey key(TableMetadata metadata, int key)
diff --cc test/unit/org/apache/cassandra/db/ReadResponseTest.java
index f625d41,29fa784..f8a19fd
--- a/test/unit/org/apache/cassandra/db/ReadResponseTest.java
+++ b/test/unit/org/apache/cassandra/db/ReadResponseTest.java
@@@ -236,10 -262,8 +262,9 @@@ public class ReadResponseTes
                    DataLimits.NONE,
                    metadata.partitioner.decorateKey(ByteBufferUtil.bytes(key)),
                    null,
 -                  null);
 +                  null,
 +                  false);
-             this.repairedDigest = repairedDigest;
-             this.conclusive = conclusive;
+            
          }
  
          @Override

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org