adelapena commented on a change in pull request #870:
URL: https://github.com/apache/cassandra/pull/870#discussion_r567806318



##########
File path: src/java/org/apache/cassandra/dht/RangeStreamer.java
##########
@@ -353,9 +361,27 @@ public void addRanges(String keyspaceName, 
ReplicaCollection<?> replicas)
      */
     private boolean useStrictSourcesForRanges(AbstractReplicationStrategy 
strat)
     {
-        return useStrictConsistency
-                && tokens != null
-                && metadata.getSizeOfAllEndpoints() != 
strat.getReplicationFactor().allReplicas;
+        boolean res = useStrictConsistency && tokens != null;
+        
+        if (res)
+        {
+            int nodes = 0;
+
+            if (strat instanceof NetworkTopologyStrategy)
+            {
+                ImmutableMultimap<String, InetAddressAndPort> dc2Nodes = 
metadata.getDC2AllEndpoints(snitch);
+
+                NetworkTopologyStrategy ntps = (NetworkTopologyStrategy) strat;
+                for (String dc : dc2Nodes.keySet())
+                    nodes += ntps.getReplicationFactor(dc).allReplicas > 0 ? 
dc2Nodes.get(dc).size() : 0;
+            }
+            else
+                nodes = metadata.getSizeOfAllEndpoints();
+    
+            res = res && nodes > strat.getReplicationFactor().allReplicas;

Review comment:
       The `&&` part seems redundant here, since `res` is always true when 
evaluating this line, as it's shown by an IDE warning. We could just use:
   ```java
   res = nodes > strat.getReplicationFactor().allReplicas;
   ```
   Or maybe we could just eagerly return `false` after evaluating 
`useStrictConsistency` and `token` at the beginning of the method, and so also 
reduce nesting?
   ```java
   if (!useStrictConsistency || tokens == null)
       return false;
   
   int nodes = 0;
   
   if (strat instanceof NetworkTopologyStrategy)
   {
       ImmutableMultimap<String, InetAddressAndPort> dc2Nodes = 
metadata.getDC2AllEndpoints(snitch);
       NetworkTopologyStrategy ntps = (NetworkTopologyStrategy) strat;
       for (String dc : dc2Nodes.keySet())
           nodes += ntps.getReplicationFactor(dc).allReplicas > 0 ? 
dc2Nodes.get(dc).size() : 0;
   }
   else
   {
       nodes = metadata.getSizeOfAllEndpoints();
   }
   
   return nodes > strat.getReplicationFactor().allReplicas;
   ```




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to