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);

Reply via email to