diff --git a/CHANGES.txt b/CHANGES.txt index 3d60231178..87ee90e3a7 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -3,6 +3,7 @@ * Allow nodetool garbagecollect to take a user defined list of SSTables (CASSANDRA-16767) * Add a guardrail for misprepared statements (CASSANDRA-21139) Merged from 6.0: + * Report cancelled read command execution to coordinator as a RequestFailure.TIMEOUT (CASSANDRA-21468) * Add policy for selecting CMS host when submitting commit request (CASSANDRA-21456) * Fix TCM log catchup from peer with snapshots and gaps in the log sequence (CASSANDRA-21455) * Speed up nodetool doc generation by producing all command help in a single jvm (CASSANDRA-21444) diff --git a/src/java/org/apache/cassandra/service/StorageProxy.java b/src/java/org/apache/cassandra/service/StorageProxy.java index 4368f6d4fc..9e61567cb4 100644 --- a/src/java/org/apache/cassandra/service/StorageProxy.java +++ b/src/java/org/apache/cassandra/service/StorageProxy.java @@ -2739,6 +2739,7 @@ public class StorageProxy implements StorageProxyMBean protected void runMayThrow() { + boolean cancelled = false; try { MessageParams.reset(); @@ -2765,6 +2766,7 @@ public class StorageProxy implements StorageProxyMBean { logger.debug("Query cancelled (timeout)", e); response = null; + cancelled = true; Preconditions.checkState(!command.isCompleted(), "Local read marked as completed despite being aborted by timeout to table %s", command.metadata()); } @@ -2776,7 +2778,7 @@ public class StorageProxy implements StorageProxyMBean { // We track latency based on request processing time MessagingService.instance().metrics.recordSelfDroppedMessage(verb, MonotonicClock.Global.preciseTime.now() - requestTime.startedAtNanos(), NANOSECONDS); - handler.onFailure(FBUtilities.getBroadcastAddressAndPort(), RequestFailure.UNKNOWN); + handler.onFailure(FBUtilities.getBroadcastAddressAndPort(), cancelled ? RequestFailure.TIMEOUT : RequestFailure.UNKNOWN); } if (!readRejected)