diff --git a/CHANGES.txt b/CHANGES.txt index 501e740f7e..776d2942d6 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.0.9 + * Fix assertion error in CL.ANY timeout handling (CASSANDRA-7364) * Handle empty CFs in Memtable#maybeUpdateLiveRatio() (CASSANDRA-7401) * Fix native protocol CAS batches (CASSANDRA-7337) * Add per-CF range read request latency metrics (CASSANDRA-7338) diff --git a/src/java/org/apache/cassandra/service/StorageProxy.java b/src/java/org/apache/cassandra/service/StorageProxy.java index 59834cf539..3b10cff51c 100644 --- a/src/java/org/apache/cassandra/service/StorageProxy.java +++ b/src/java/org/apache/cassandra/service/StorageProxy.java @@ -487,7 +487,12 @@ public class StorageProxy implements StorageProxyMBean List naturalEndpoints = StorageService.instance.getNaturalEndpoints(mutation.getKeyspaceName(), tk); Collection pendingEndpoints = StorageService.instance.getTokenMetadata().pendingEndpointsFor(tk, mutation.getKeyspaceName()); for (InetAddress target : Iterables.concat(naturalEndpoints, pendingEndpoints)) - submitHint((RowMutation) mutation, target, null); + { + // local writes can timeout, but cannot be dropped (see LocalMutationRunnable and + // CASSANDRA-6510), so there is no need to hint or retry + if (!target.equals(FBUtilities.getBroadcastAddress()) && shouldHint(target)) + submitHint((RowMutation) mutation, target, null); + } } Tracing.trace("Wrote hint to satisfy CL.ANY after no replicas acknowledged the write"); }