Github user aweisberg commented on a diff in the pull request:

    https://github.com/apache/cassandra/pull/269#discussion_r220336800
  
    --- Diff: src/java/org/apache/cassandra/dht/RangeStreamer.java ---
    @@ -424,62 +440,58 @@ else if (useStrictConsistency)
                      EndpointsForRange sources;
                      if (useStrictConsistency)
                      {
    -                     //Start with two sets of who replicates the range 
before and who replicates it after
    -                     EndpointsForRange newEndpoints = 
strat.calculateNaturalReplicas(toFetch.range().right, tmdAfter);
    -                     logger.debug("Old endpoints {}", oldEndpoints);
    -                     logger.debug("New endpoints {}", newEndpoints);
    -
    +                     EndpointsForRange strictEndpoints;
                          //Due to CASSANDRA-5953 we can have a higher RF then 
we have endpoints.
                          //So we need to be careful to only be strict when 
endpoints == RF
                          if (oldEndpoints.size() == 
strat.getReplicationFactor().allReplicas)
                          {
    -                         Set<InetAddressAndPort> endpointsStillReplicated 
= newEndpoints.endpoints();
    +                         //Start with two sets of who replicates the range 
before and who replicates it after
    +                         EndpointsForRange newEndpoints = 
strat.calculateNaturalReplicas(toFetch.range().right, tmdAfter);
    +                         logger.debug("Old endpoints {}", oldEndpoints);
    +                         logger.debug("New endpoints {}", newEndpoints);
    +
                              // Remove new endpoints from old endpoints based 
on address
    -                         oldEndpoints = oldEndpoints.filter(r -> 
!endpointsStillReplicated.contains(r.endpoint()));
    -                         oldEndpoints.filter(testSourceFilters);
    +                         strictEndpoints = 
oldEndpoints.without(newEndpoints.endpoints());
     
    -                         if (oldEndpoints.size() > 1)
    -                             throw new AssertionError("Expected <= 1 
endpoint but found " + oldEndpoints);
    +                         //We have to check the source filters here to see 
if they will remove any replicas
    +                         //required for strict consistency
    +                         if (!all(strictEndpoints, testSourceFilters))
    +                             throw new IllegalStateException("Necessary 
replicas for strict consistency were removed by source filters: " + 
buildErrorMessage(sourceFilters, strictEndpoints));
    +
    +                         if (strictEndpoints.size() > 1)
    --- End diff --
    
    This no longer asserts what it did before if you are filtering before we 
get to this assertion. 


---

---------------------------------------------------------------------
To unsubscribe, e-mail: pr-unsubscr...@cassandra.apache.org
For additional commands, e-mail: pr-h...@cassandra.apache.org

Reply via email to