>From Savyasach Reddy <[email protected]>:

Savyasach Reddy has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19378 )


Change subject: [NO ISSUE]: Avoid potential overflows
......................................................................

[NO ISSUE]: Avoid potential overflows

- user model changes: no
- storage format changes: no
- interface changes: no

details:
- delay might overflow if maxRetries > 50

Change-Id: Icdc500f49ac9b90e169182930489ec6c5fee7552
---
M 
hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExponentialRetryPolicy.java
1 file changed, 20 insertions(+), 4 deletions(-)



  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/78/19378/1

diff --git 
a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExponentialRetryPolicy.java
 
b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExponentialRetryPolicy.java
index a5255ab..91e7daf 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExponentialRetryPolicy.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExponentialRetryPolicy.java
@@ -27,9 +27,9 @@
     private static final long DEFAULT_INITIAL_DELAY_IN_MILLIS = 100;
     private static final long DEFAULT_MAX_DELAY_IN_MILLIS = Long.MAX_VALUE;
     private final int maxRetries;
-    private final long initialDelay;
     private final long maxDelay;
     private int attempt = 0;
+    private long delay;

     /**
      * Default constructor for ExponentialRetryPolicy.
@@ -48,8 +48,8 @@
      */
     public ExponentialRetryPolicy(int maxRetries, long initialDelay, long 
maxDelay) {
         this.maxRetries = maxRetries;
-        this.initialDelay = initialDelay;
         this.maxDelay = maxDelay;
+        this.delay = Long.min(initialDelay, maxDelay);
     }

     /**
@@ -77,12 +77,12 @@
     public boolean retry(Throwable failure) {
         if (attempt < maxRetries) {
             try {
-                long delay = initialDelay * (1L << attempt);
-                
TimeUnit.MILLISECONDS.sleep(ThreadLocalRandom.current().nextLong(1 + 
Long.min(delay, maxDelay)));
+                
TimeUnit.MILLISECONDS.sleep(ThreadLocalRandom.current().nextLong(1 + delay));
             } catch (InterruptedException e) {
                 Thread.currentThread().interrupt();
             }
             attempt++;
+            delay = delay > maxDelay / 2 ? maxDelay : delay * 2;
             return true;
         }
         return false;

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19378
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings

Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: Icdc500f49ac9b90e169182930489ec6c5fee7552
Gerrit-Change-Number: 19378
Gerrit-PatchSet: 1
Gerrit-Owner: Savyasach Reddy <[email protected]>
Gerrit-MessageType: newchange

Reply via email to