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

miroslav pushed a commit to branch issue/OAK-10573_azure_write_timeout
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git


The following commit(s) were added to 
refs/heads/issue/OAK-10573_azure_write_timeout by this push:
     new 477613d076 OAK-10573 introduce AzureRequestOptions util class
477613d076 is described below

commit 477613d0766b0af23b55c138d05a6e67a69b03a5
Author: Miroslav Smiljanic <[email protected]>
AuthorDate: Thu Nov 30 11:20:15 2023 +0100

    OAK-10573 introduce AzureRequestOptions util class
---
 .../segment/azure/util/AzureRequestOptions.java    | 35 ++++++++-----
 .../azure/util/AzureRequestOptionsTest.java        | 59 ++++++++++++++++++++++
 2 files changed, 82 insertions(+), 12 deletions(-)

diff --git 
a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/util/AzureRequestOptions.java
 
b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/util/AzureRequestOptions.java
index 485612371d..9a6ffbfb3f 100644
--- 
a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/util/AzureRequestOptions.java
+++ 
b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/util/AzureRequestOptions.java
@@ -7,22 +7,26 @@ import java.util.concurrent.TimeUnit;
 
 public class AzureRequestOptions {
 
-    private static final String RETRY_ATTEMPTS_PROP = 
"segment.azure.retry.attempts";
-    private static final int DEFAULT_RETRY_ATTEMPTS = 5;
+    static final String RETRY_ATTEMPTS_PROP = "segment.azure.retry.attempts";
+    static final int DEFAULT_RETRY_ATTEMPTS = 5;
 
-    private static final String RETRY_BACKOFF_PROP = 
"segment.azure.retry.backoff";
-    private static final int DEFAULT_RETRY_BACKOFF_SECONDS = 5;
+    static final String RETRY_BACKOFF_PROP = "segment.azure.retry.backoff";
+    static final int DEFAULT_RETRY_BACKOFF_SECONDS = 5;
 
-    private static final String TIMEOUT_EXECUTION_PROP = 
"segment.timeout.execution";
-    private static final int DEFAULT_TIMEOUT_EXECUTION = 30;
+    static final String TIMEOUT_EXECUTION_PROP = "segment.timeout.execution";
+    static final int DEFAULT_TIMEOUT_EXECUTION = 30;
 
-    private static final String TIMEOUT_INTERVAL_PROP = 
"segment.timeout.interval";
-    private static final int DEFAULT_TIMEOUT_INTERVAL = 1;
+    static final String TIMEOUT_INTERVAL_PROP = "segment.timeout.interval";
+    static final int DEFAULT_TIMEOUT_INTERVAL = 1;
 
-    private static final String WRITE_TIMEOUT_EXECUTION_PROP = 
"segment.write.timeout.execution";
+    static final String WRITE_TIMEOUT_EXECUTION_PROP = 
"segment.write.timeout.execution";
 
-    private static final String WRITE_TIMEOUT_INTERVAL_PROP = 
"segment.write.timeout.interval";
+    static final String WRITE_TIMEOUT_INTERVAL_PROP = 
"segment.write.timeout.interval";
 
+    /**
+     * Apply default request options to the blobRequestOptions if they are not 
already set.
+     * @param blobRequestOptions
+     */
     public static void applyDefaultRequestOptions(BlobRequestOptions 
blobRequestOptions) {
         if (blobRequestOptions.getRetryPolicyFactory() == null) {
             int retryAttempts = Integer.getInteger(RETRY_ATTEMPTS_PROP, 
DEFAULT_RETRY_ATTEMPTS);
@@ -45,17 +49,24 @@ public class AzureRequestOptions {
         }
     }
 
+    /**
+     * Optimise the blob request options for write operations. This method 
does not change the original blobRequestOptions.
+     * This method also applies the default request options if they are not 
already set, by calling {@link #applyDefaultRequestOptions(BlobRequestOptions)}
+     * @param blobRequestOptions
+     * @return write optimised blobRequestOptions
+     */
     public static BlobRequestOptions 
optimiseForWriteOperations(BlobRequestOptions blobRequestOptions) {
         BlobRequestOptions writeOptimisedBlobRequestOptions = new 
BlobRequestOptions(blobRequestOptions);
+        applyDefaultRequestOptions(writeOptimisedBlobRequestOptions);
 
         Integer writeTimeoutExecution = 
Integer.getInteger(WRITE_TIMEOUT_EXECUTION_PROP);
         if (writeTimeoutExecution != null) {
-            
writeOptimisedBlobRequestOptions.setMaximumExecutionTimeInMs(writeTimeoutExecution);
+            writeOptimisedBlobRequestOptions.setMaximumExecutionTimeInMs((int) 
TimeUnit.SECONDS.toMillis(writeTimeoutExecution));
         }
 
         Integer writeTimeoutInterval = 
Integer.getInteger(WRITE_TIMEOUT_INTERVAL_PROP);
         if (writeTimeoutInterval != null) {
-            
writeOptimisedBlobRequestOptions.setTimeoutIntervalInMs(writeTimeoutInterval);
+            writeOptimisedBlobRequestOptions.setTimeoutIntervalInMs((int) 
TimeUnit.SECONDS.toMillis(writeTimeoutInterval));
         }
 
         return writeOptimisedBlobRequestOptions;
diff --git 
a/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/util/AzureRequestOptionsTest.java
 
b/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/util/AzureRequestOptionsTest.java
new file mode 100644
index 0000000000..35586b8889
--- /dev/null
+++ 
b/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/util/AzureRequestOptionsTest.java
@@ -0,0 +1,59 @@
+package org.apache.jackrabbit.oak.segment.azure.util;
+
+import com.microsoft.azure.storage.blob.BlobRequestOptions;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.concurrent.TimeUnit;
+
+import static org.junit.Assert.assertEquals;
+
+public class AzureRequestOptionsTest {
+
+    private BlobRequestOptions blobRequestOptions;
+
+    @Before
+    public void setUp() {
+        blobRequestOptions = new BlobRequestOptions();
+    }
+
+    @Test
+    public void testApplyDefaultRequestOptions() {
+        AzureRequestOptions.applyDefaultRequestOptions(blobRequestOptions);
+        
assertEquals(Long.valueOf(TimeUnit.SECONDS.toMillis(AzureRequestOptions.DEFAULT_TIMEOUT_EXECUTION)),
 Long.valueOf(blobRequestOptions.getMaximumExecutionTimeInMs()));
+        
assertEquals(Long.valueOf(TimeUnit.SECONDS.toMillis(AzureRequestOptions.DEFAULT_TIMEOUT_INTERVAL)),
 Long.valueOf(blobRequestOptions.getTimeoutIntervalInMs()));
+    }
+
+    @Test
+    public void testApplyDefaultRequestOptionsWithCustomTimeouts() {
+        System.setProperty(AzureRequestOptions.TIMEOUT_EXECUTION_PROP, "10");
+        System.setProperty(AzureRequestOptions.TIMEOUT_INTERVAL_PROP, "5");
+
+        AzureRequestOptions.applyDefaultRequestOptions(blobRequestOptions);
+        assertEquals(Long.valueOf(TimeUnit.SECONDS.toMillis(10)), 
Long.valueOf(blobRequestOptions.getMaximumExecutionTimeInMs()));
+        assertEquals(Long.valueOf(TimeUnit.SECONDS.toMillis(5)), 
Long.valueOf(blobRequestOptions.getTimeoutIntervalInMs()));
+
+        System.clearProperty(AzureRequestOptions.TIMEOUT_EXECUTION_PROP);
+        System.clearProperty(AzureRequestOptions.TIMEOUT_INTERVAL_PROP);
+    }
+
+    @Test
+    public void testOptimiseForWriteOperations() {
+        BlobRequestOptions writeBlobRequestoptions = 
AzureRequestOptions.optimiseForWriteOperations(blobRequestOptions);
+        
assertEquals(Long.valueOf(TimeUnit.SECONDS.toMillis(AzureRequestOptions.DEFAULT_TIMEOUT_EXECUTION)),
 Long.valueOf(writeBlobRequestoptions.getMaximumExecutionTimeInMs()));
+        
assertEquals(Long.valueOf(TimeUnit.SECONDS.toMillis(AzureRequestOptions.DEFAULT_TIMEOUT_INTERVAL)),
 Long.valueOf(writeBlobRequestoptions.getTimeoutIntervalInMs()));
+    }
+
+    @Test
+    public void testOptimiseForWriteOperationsWithCustomTimeouts() {
+        System.setProperty(AzureRequestOptions.WRITE_TIMEOUT_EXECUTION_PROP, 
"10");
+        System.setProperty(AzureRequestOptions.WRITE_TIMEOUT_INTERVAL_PROP, 
"5");
+
+        BlobRequestOptions writeBlobRequestoptions = 
AzureRequestOptions.optimiseForWriteOperations(blobRequestOptions);
+        assertEquals(Long.valueOf(TimeUnit.SECONDS.toMillis(10)), 
Long.valueOf(writeBlobRequestoptions.getMaximumExecutionTimeInMs()));
+        assertEquals(Long.valueOf(TimeUnit.SECONDS.toMillis(5)), 
Long.valueOf(writeBlobRequestoptions.getTimeoutIntervalInMs()));
+
+        System.clearProperty(AzureRequestOptions.WRITE_TIMEOUT_EXECUTION_PROP);
+        System.clearProperty(AzureRequestOptions.WRITE_TIMEOUT_INTERVAL_PROP);
+    }
+}

Reply via email to