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]