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

benedict pushed a commit to branch cep-15-accord
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit e0dc2fc712f0f8698641fc885b5b67faf32c79b4
Author: Benedict Elliott Smith <bened...@apache.org>
AuthorDate: Fri Apr 4 20:12:30 2025 +0100

    Fix CQLSSTableWriterConcurrencyTest
    
    patch by Benedict; reviewed by David Capwell for CASSANDRA-20529
---
 src/java/org/apache/cassandra/config/Config.java           |  2 +-
 src/java/org/apache/cassandra/service/RetryStrategy.java   | 14 ++++++++++----
 .../apache/cassandra/service/paxos/ContentionStrategy.java |  2 +-
 3 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/java/org/apache/cassandra/config/Config.java 
b/src/java/org/apache/cassandra/config/Config.java
index 94f05be7c1..ce08f9ceeb 100644
--- a/src/java/org/apache/cassandra/config/Config.java
+++ b/src/java/org/apache/cassandra/config/Config.java
@@ -185,7 +185,7 @@ public class Config
     public volatile DurationSpec.IntMillisecondsBound 
cms_default_retry_backoff = null;
     @Deprecated(since="5.1")
     public volatile DurationSpec.IntMillisecondsBound 
cms_default_max_retry_backoff = null;
-    public String cms_retry_delay = "0 <= 50ms*1*attempts <= 1s,retries=10";
+    public String cms_retry_delay = "50ms*attempts <= 500ms ... 100ms*attempts 
<= 1s,retries=10";
 
     public volatile int epoch_aware_debounce_inflight_tracker_max_size = 100;
 
diff --git a/src/java/org/apache/cassandra/service/RetryStrategy.java 
b/src/java/org/apache/cassandra/service/RetryStrategy.java
index a89f93363d..91c87c520d 100644
--- a/src/java/org/apache/cassandra/service/RetryStrategy.java
+++ b/src/java/org/apache/cassandra/service/RetryStrategy.java
@@ -97,7 +97,7 @@ public class RetryStrategy implements WaitStrategy
 
     static final Pattern PARSE = Pattern.compile(
           "(\\s*(?<minmin>0|[0-9]+[mu]?s)\\s*<=)?" +
-                "(\\s*(?<min>[^=]+)\\s*[.]{3})?" +
+                
"(\\s*(?<min>[^=]+)([(]?\\s*<=\\s*(?<maxmin>0|[0-9]+[mu]?s)\\s*[)]?)?\\s*[.]{3})?"
 +
                 "(\\s*(?<max>[^=]+))" +
                 "(\\s*<=\\s*(?<maxmax>0|[0-9]+[mu]?s))?");
 
@@ -198,16 +198,17 @@ public class RetryStrategy implements WaitStrategy
     }
 
     public final WaitRandomizer waitRandomizer;
-    public final long minMinMicros, maxMaxMicros;
+    public final long minMinMicros, maxMinMicros, maxMaxMicros;
     public final @Nullable Wait min;
     public final @Nonnull Wait max;
     public final int maxAttempts;
 
-    protected RetryStrategy(WaitRandomizer waitRandomizer, long minMinMicros, 
Wait min, Wait max, long maxMaxMicros, int retries)
+    protected RetryStrategy(WaitRandomizer waitRandomizer, long minMinMicros, 
Wait min, long maxMinMicros, Wait max, long maxMaxMicros, int retries)
     {
         this.waitRandomizer = waitRandomizer;
         this.minMinMicros = minMinMicros;
         this.min = min;
+        this.maxMinMicros = maxMinMicros;
         this.max = max;
         this.maxMaxMicros = maxMaxMicros;
         this.maxAttempts = retries == Integer.MAX_VALUE ? Integer.MAX_VALUE : 
retries + 1;
@@ -235,6 +236,8 @@ public class RetryStrategy implements WaitStrategy
         else
         {
             long min = this.min.getMicros(attempt);
+            if (min > maxMinMicros)
+                min = maxMinMicros;
             long max = this.max.getMicros(attempt);
             result = min >= max ? min : waitRandomizer.wait(min, max, attempt);
         }
@@ -294,11 +297,14 @@ public class RetryStrategy implements WaitStrategy
             throw new IllegalArgumentException("Invalid to specify randomiser 
when no range specified: '" + original + '\'');
         if (min instanceof Wait.Constant && minMin != 0)
             throw new IllegalArgumentException("Invalid to specify an absolute 
minimum constant when the min bound is itself a constant: '" + original + '\'');
+        long maxMin = parseInMicros(m.group("maxmin"), Long.MAX_VALUE);
+        if (min instanceof Wait.Constant && maxMin != Long.MAX_VALUE)
+            throw new IllegalArgumentException("Invalid to specify an absolute 
max(min) constant when the min bound is itself a constant: '" + original + 
'\'');
         if (max instanceof Wait.Constant && maxMax != Long.MAX_VALUE)
             throw new IllegalArgumentException("Invalid to specify an absolute 
maximum constant when the max bound is itself a constant: '" + original + '\'');
         if (randomizer == null)
             randomizer = randomizers.uniform();
-        return new RetryStrategy(randomizer, minMin, min, max, maxMax, 
retries);
+        return new RetryStrategy(randomizer, minMin, min, maxMin, max, maxMax, 
retries);
     }
 
     @VisibleForTesting
diff --git 
a/src/java/org/apache/cassandra/service/paxos/ContentionStrategy.java 
b/src/java/org/apache/cassandra/service/paxos/ContentionStrategy.java
index 3f983faa8c..63dba970be 100644
--- a/src/java/org/apache/cassandra/service/paxos/ContentionStrategy.java
+++ b/src/java/org/apache/cassandra/service/paxos/ContentionStrategy.java
@@ -109,7 +109,7 @@ public class ContentionStrategy extends RetryStrategy
 
     public ContentionStrategy(WaitRandomizer waitRandomizer, LegacyWait min, 
LegacyWait max, LegacyWait spread, int retries, int traceAfterAttempts)
     {
-        super(waitRandomizer, min.min, min, max, max.max, retries);
+        super(waitRandomizer, min.min, min, min.max, max, max.max, retries);
         this.traceAfterAttempts = traceAfterAttempts;
         this.spread = spread;
     }


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

Reply via email to