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

mhubail pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git

commit 08695012ea4c664787eca0b5f7c722363c2a0c82
Author: Michael Blow <[email protected]>
AuthorDate: Mon Mar 31 18:22:06 2025 -0400

    [NO ISSUE][HYR][STO] Refactor CloudRetryableRequestUtil to avoid duplicate 
logic
    
    Update nearly duplicate retry loop handling for requests that return
    results and those that don't, to use a single implementation. Ensure
    that this implementation handles interrupts correctly.
    
    Ext-ref: MB-66048
    Change-Id: I1e5afdeb1ba6a4787b4ce60ed7b64121da3327d8
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19605
    Integration-Tests: Jenkins <[email protected]>
    Tested-by: Ali Alsuliman <[email protected]>
    Reviewed-by: Ali Alsuliman <[email protected]>
---
 .../hyracks/cloud/io/request/ICloudRequest.java    |  7 ++++
 .../cloud/util/CloudRetryableRequestUtil.java      | 46 ++--------------------
 2 files changed, 11 insertions(+), 42 deletions(-)

diff --git 
a/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/io/request/ICloudRequest.java
 
b/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/io/request/ICloudRequest.java
index 4f2532348d..a70ecdd5a4 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/io/request/ICloudRequest.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/io/request/ICloudRequest.java
@@ -29,4 +29,11 @@ public interface ICloudRequest {
      * Run the cloud request
      */
     void call() throws IOException;
+
+    static ICloudReturnableRequest<Void> asReturnableRequest(ICloudRequest 
request) {
+        return () -> {
+            request.call();
+            return null;
+        };
+    }
 }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/util/CloudRetryableRequestUtil.java
 
b/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/util/CloudRetryableRequestUtil.java
index 9e3d5c214a..c36e4a7cba 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/util/CloudRetryableRequestUtil.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/util/CloudRetryableRequestUtil.java
@@ -18,6 +18,8 @@
  */
 package org.apache.hyracks.cloud.util;
 
+import static 
org.apache.hyracks.cloud.io.request.ICloudRequest.asReturnableRequest;
+
 import java.io.IOException;
 
 import org.apache.hyracks.api.exceptions.HyracksDataException;
@@ -76,30 +78,7 @@ public class CloudRetryableRequestUtil {
      * @param retry   a pre-retry routine to make the operation idempotent
      */
     public static void run(ICloudRequest request, ICloudBeforeRetryRequest 
retry) throws HyracksDataException {
-        boolean interrupted = Thread.interrupted();
-        try {
-            while (true) {
-                try {
-                    doRun(request, retry);
-                    break;
-                } catch (Throwable e) {
-                    // First, clear the interrupted flag
-                    interrupted |= Thread.interrupted();
-                    if (ExceptionUtils.causedByInterrupt(e)) {
-                        interrupted = true;
-                    } else {
-                        // The cause isn't an interruption, rethrow
-                        throw e;
-                    }
-                    retry.beforeRetry();
-                    LOGGER.warn("Ignored interrupting 
ICloudReturnableRequest", e);
-                }
-            }
-        } finally {
-            if (interrupted) {
-                Thread.currentThread().interrupt();
-            }
-        }
+        run(asReturnableRequest(request), retry);
     }
 
     /**
@@ -199,24 +178,7 @@ public class CloudRetryableRequestUtil {
     }
 
     private static void doRun(ICloudRequest request, ICloudBeforeRetryRequest 
retry) throws HyracksDataException {
-        int attempt = 1;
-        IRetryPolicy retryPolicy = null;
-        while (true) {
-            try {
-                request.call();
-                break;
-            } catch (IOException | BaseServiceException | SdkException e) {
-                if (retryPolicy == null) {
-                    retryPolicy = new 
ExponentialRetryPolicy(NUMBER_OF_RETRIES, MAX_DELAY_BETWEEN_RETRIES);
-                }
-                if (!retryPolicy.retry(e)) {
-                    throw HyracksDataException.create(e);
-                }
-                attempt++;
-                retry.beforeRetry();
-                LOGGER.warn("Failed to perform ICloudRequest, performing 
{}/{}", attempt, NUMBER_OF_RETRIES, e);
-            }
-        }
+        doRun(asReturnableRequest(request), retry);
     }
 
     private static int getNumberOfRetries() {

Reply via email to