10485-3.0 patch
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/ed424bdd Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/ed424bdd Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/ed424bdd Branch: refs/heads/trunk Commit: ed424bdd65ccf11742f2016ae5bc0b3ad5a99571 Parents: 2a12713 Author: Joshua McKenzie <jmcken...@apache.org> Authored: Fri Nov 13 09:49:31 2015 -0500 Committer: Joshua McKenzie <jmcken...@apache.org> Committed: Fri Nov 13 09:49:31 2015 -0500 ---------------------------------------------------------------------- .../apache/cassandra/service/StorageProxy.java | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/ed424bdd/src/java/org/apache/cassandra/service/StorageProxy.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/StorageProxy.java b/src/java/org/apache/cassandra/service/StorageProxy.java index 6bcc2f8..63fa8cf 100644 --- a/src/java/org/apache/cassandra/service/StorageProxy.java +++ b/src/java/org/apache/cassandra/service/StorageProxy.java @@ -2476,10 +2476,22 @@ public class StorageProxy implements StorageProxyMBean { public void runMayThrow() { - logger.trace("Adding hints for {}", targets); - HintsService.instance.write(Iterables.transform(targets, StorageService.instance::getHostIdForEndpoint), - Hint.create(mutation, System.currentTimeMillis())); - targets.forEach(HintsService.instance.metrics::incrCreatedHints); + Set<InetAddress> validTargets = new HashSet<>(targets.size()); + Set<UUID> hostIds = new HashSet<>(targets.size()); + for (InetAddress target : targets) + { + UUID hostId = StorageService.instance.getHostIdForEndpoint(target); + if (hostId != null) + { + hostIds.add(hostId); + validTargets.add(target); + } + else + logger.debug("Discarding hint for endpoint not part of ring: {}", target); + } + logger.trace("Adding hints for {}", validTargets); + HintsService.instance.write(hostIds, Hint.create(mutation, System.currentTimeMillis())); + validTargets.forEach(HintsService.instance.metrics::incrCreatedHints); // Notify the handler only for CL == ANY if (responseHandler != null && responseHandler.consistencyLevel == ConsistencyLevel.ANY) responseHandler.response(null);