This is an automated email from the ASF dual-hosted git repository.

bereng pushed a commit to branch cassandra-4.1
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit 3e2e4c3ea15f0b4bcab6318f859e5194556c4f0e
Merge: ec00426584 fcea0b6fd8
Author: Bereng <berenguerbl...@gmail.com>
AuthorDate: Mon Apr 14 09:20:52 2025 +0200

    Merge branch 'cassandra-4.0' into cassandra-4.1
    
    * cassandra-4.0:
      CASSANDRA-19633 Replaced node is stuck in a loop calculating ranges

 .../config/CassandraRelevantProperties.java        |  9 ++-
 .../org/apache/cassandra/dht/RangeStreamer.java    |  9 ++-
 .../org/apache/cassandra/dht/BootStrapperTest.java | 86 ++++++++++++++++++----
 3 files changed, 84 insertions(+), 20 deletions(-)

diff --cc test/unit/org/apache/cassandra/dht/BootStrapperTest.java
index f23e50521a,4b2a56a2d2..8f766015f7
--- a/test/unit/org/apache/cassandra/dht/BootStrapperTest.java
+++ b/test/unit/org/apache/cassandra/dht/BootStrapperTest.java
@@@ -83,6 -105,52 +105,52 @@@ public class BootStrapperTes
          }
      }
  
+     @Test
+     @BMRules(rules = { @BMRule(name = "Make sure the non-optimized path is 
picked up for some operations",
+                                targetClass = 
"org.apache.cassandra.dht.RangeStreamer",
+                                targetMethod = 
"convertPreferredEndpointsToWorkMap(EndpointsByReplica)",
+                                action = 
"org.apache.cassandra.dht.BootStrapperTest.nonOptimizationHit.set(true)"),
+                        @BMRule(name = "Make sure the optimized path is picked 
up for some operations",
+                                targetClass = 
"org.apache.cassandra.dht.RangeStreamer",
+                                targetMethod = 
"getOptimizedWorkMap(EndpointsByReplica,Collection,String)",
+                                action = 
"org.apache.cassandra.dht.BootStrapperTest.optimizationHit.set(true)") })
+     public void testStreamingCandidatesOptmizationSkip() throws 
UnknownHostException
+     {
+         testSkipStreamingCandidatesOptmizationFeatureFlag(true, true, false);
+         testSkipStreamingCandidatesOptmizationFeatureFlag(false, true, true);
+     }
+ 
+     private void testSkipStreamingCandidatesOptmizationFeatureFlag(boolean 
disableOptimization, boolean nonOptimizedPathHit, boolean optimizedPathHit) 
throws UnknownHostException
+     {
+         try
+         {
+             nonOptimizationHit.set(false);
+             optimizationHit.set(false);
+             
CassandraRelevantProperties.SKIP_OPTIMAL_STREAMING_CANDIDATES_CALCULATION.setBoolean(disableOptimization);
+ 
 -            for (String keyspaceName : 
Schema.instance.getNonLocalStrategyKeyspaces())
++            for (String keyspaceName : Schema.instance.getUserKeyspaces())
+             {
+                 StorageService ss = StorageService.instance;
+                 TokenMetadata tmd = ss.getTokenMetadata();
+ 
+                 generateFakeEndpoints(10);
+                 Token myToken = tmd.partitioner.getRandomToken();
+                 InetAddressAndPort myEndpoint = 
InetAddressAndPort.getByName("127.0.0.1");
+ 
+                 assertEquals(10, tmd.sortedTokens().size());
+                 RangeStreamer s = new RangeStreamer(tmd, null, myEndpoint, 
StreamOperation.BOOTSTRAP, true, DatabaseDescriptor.getEndpointSnitch(), new 
StreamStateStore(), mockFailureDetector, false, 1);
+                 s.addRanges(keyspaceName, 
Keyspace.open(keyspaceName).getReplicationStrategy().getPendingAddressRanges(tmd,
 myToken, myEndpoint));
+             }
+ 
+             assertEquals(nonOptimizedPathHit, nonOptimizationHit.get());
+             assertEquals(optimizedPathHit, optimizationHit.get());
+         }
+         finally
+         {
+             
CassandraRelevantProperties.SKIP_OPTIMAL_STREAMING_CANDIDATES_CALCULATION.reset();
+         }
+     }
+ 
      private RangeStreamer testSourceTargetComputation(String keyspaceName, 
int numOldNodes, int replicationFactor) throws UnknownHostException
      {
          StorageService ss = StorageService.instance;


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

Reply via email to