[ 
https://issues.apache.org/jira/browse/HADOOP-18640?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17696897#comment-17696897
 ] 

ASF GitHub Bot commented on HADOOP-18640:
-----------------------------------------

sreeb-msft commented on code in PR #5446:
URL: https://github.com/apache/hadoop/pull/5446#discussion_r1126325114


##########
hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azurebfs/services/TestExponentialRetryPolicy.java:
##########
@@ -285,6 +299,154 @@ public void testAbfsConfigConstructor() throws Exception {
     Assert.assertEquals("Delta backoff interval was not set as expected.", 
expectedDeltaBackoff, policy.getDeltaBackoff());
   }
 
+//  public void testClientBackoffOnlyNewRequest() throws IOException {
+  @Test
+  public void testClientBackoffOnlyNewWriteRequest() throws IOException, 
InterruptedException {
+    AzureBlobFileSystem fs = getFileSystem();
+    AbfsClient client = fs.getAbfsStore().getClient();
+    AbfsConfiguration configuration = client.getAbfsConfiguration();
+    Assume.assumeTrue(configuration.isAutoThrottlingEnabled());
+    AbfsCounters counters = client.getAbfsCounters();
+
+    URL dummyUrl = client.createRequestUrl("/", "");
+    String dummyMethod = HTTP_METHOD_PUT;
+
+    AbfsRestOperationType testOperationType = AbfsRestOperationType.Append;
+
+    AbfsRestOperation restOp = new AbfsRestOperation(testOperationType, 
client, dummyMethod, dummyUrl, new ArrayList<>());
+
+    Long writeThrottleStatBefore = 
counters.toMap().get(AbfsStatistic.WRITE_THROTTLES.getStatName());
+    Thread.sleep(10000);
+    boolean appliedBackoff = restOp.applyThrottlingBackoff(0, 
testOperationType, counters);
+    assertEquals(true, appliedBackoff);
+    Long writeThrottleStatAfter = 
counters.toMap().get(AbfsStatistic.WRITE_THROTTLES.getStatName());
+    assertEquals(new Long(writeThrottleStatBefore+1), writeThrottleStatAfter);
+
+
+    writeThrottleStatBefore = 
counters.toMap().get(AbfsStatistic.WRITE_THROTTLES.getStatName());
+    appliedBackoff = restOp.applyThrottlingBackoff(1, testOperationType, 
counters);
+    assertEquals(false, appliedBackoff);
+    writeThrottleStatAfter = 
counters.toMap().get(AbfsStatistic.WRITE_THROTTLES.getStatName());
+    assertEquals(writeThrottleStatBefore, writeThrottleStatAfter);
+  }
+
+  @Test
+  public void testClientBackoffOnlyNewReadRequest() throws IOException, 
InterruptedException {
+    AzureBlobFileSystem fs = getFileSystem();
+    AbfsClient client = fs.getAbfsStore().getClient();
+    AbfsConfiguration configuration = client.getAbfsConfiguration();
+    Assume.assumeTrue(configuration.isAutoThrottlingEnabled());
+    AbfsCounters counters = client.getAbfsCounters();
+
+    URL dummyUrl = client.createRequestUrl("/", "");
+    String dummyMethod = AbfsHttpConstants.HTTP_METHOD_GET;
+
+    AbfsRestOperationType testOperationType = AbfsRestOperationType.ReadFile;
+
+    AbfsRestOperation restOp = new AbfsRestOperation(testOperationType, 
client, dummyMethod, dummyUrl, new ArrayList<>());
+
+    Long readThrottleStatBefore = 
counters.toMap().get(AbfsStatistic.READ_THROTTLES.getStatName());
+    Thread.sleep(10000);
+    boolean appliedBackoff = restOp.applyThrottlingBackoff(0, 
testOperationType, counters);
+    assertEquals(true, appliedBackoff);
+    Long readThrottleStatAfter = 
counters.toMap().get(AbfsStatistic.READ_THROTTLES.getStatName());
+    assertEquals(new Long(readThrottleStatBefore+1), readThrottleStatAfter);
+
+
+    readThrottleStatBefore = 
counters.toMap().get(AbfsStatistic.READ_THROTTLES.getStatName());
+    appliedBackoff = restOp.applyThrottlingBackoff(1, testOperationType, 
counters);
+    assertEquals(false, appliedBackoff);
+    readThrottleStatAfter = 
counters.toMap().get(AbfsStatistic.READ_THROTTLES.getStatName());
+    assertEquals(readThrottleStatBefore, readThrottleStatAfter);
+  }
+
+  @Test
+  public void testReadThrottleNewRequest() throws IOException {
+    AzureBlobFileSystem fs = getFileSystem();
+    AbfsClient client = Mockito.spy(fs.getAbfsStore().getClient());
+    AbfsConfiguration configuration = client.getAbfsConfiguration();
+    Assume.assumeTrue(configuration.isAutoThrottlingEnabled());
+    AbfsCounters counters = client.getAbfsCounters();
+
+    AbfsThrottlingIntercept intercept = 
Mockito.mock(AbfsThrottlingIntercept.class);
+    
Mockito.doNothing().when(intercept).sendingRequest(Mockito.any(AbfsRestOperationType.class),
 Mockito.any(AbfsCounters.class));
+    Mockito.doReturn(intercept).when(client).getIntercept();
+
+    // setting up the spy AbfsRestOperation class for read
+    final List<AbfsHttpHeader> requestHeaders = client.createDefaultHeaders();
+
+    final AbfsUriQueryBuilder abfsUriQueryBuilder = 
client.createDefaultUriQueryBuilder();
+
+    final URL url = client.createRequestUrl("/dummyReadFile", 
abfsUriQueryBuilder.toString());
+    final AbfsRestOperation mockRestOp = Mockito.spy(new AbfsRestOperation(
+            AbfsRestOperationType.ReadFile,
+            client,
+            HTTP_METHOD_GET,
+            url,
+            requestHeaders));
+
+    // setting up mock behavior for the AbfsHttpOperation class
+    AbfsHttpOperation mockHttpOp = 
Mockito.spy(mockRestOp.createHttpOperationInstance());

Review Comment:
   Just Mocking is leading to NPE under executeHttpOperation method. Keeping it 
as a spy.





> ABFS: Enabling Client-side Backoff only for new requests
> --------------------------------------------------------
>
>                 Key: HADOOP-18640
>                 URL: https://issues.apache.org/jira/browse/HADOOP-18640
>             Project: Hadoop Common
>          Issue Type: Sub-task
>          Components: fs/azure
>            Reporter: Sree Bhattacharyya
>            Assignee: Sree Bhattacharyya
>            Priority: Minor
>              Labels: pull-request-available
>
> Enabling backoff only for new requests that happen, and disabling for retried 
> requests.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to