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 4f25323..a70ecdd 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 @@
      * 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 9e3d5c2..c36e4a7 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 @@
      * @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 @@
     }
 
     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() {
