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

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

anujmodi2021 commented on code in PR #8410:
URL: https://github.com/apache/hadoop/pull/8410#discussion_r3055444700


##########
hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azurebfs/AzureBlobFileSystemStore.java:
##########
@@ -422,17 +423,33 @@ private synchronized boolean 
getNamespaceEnabledInformationFromServer(
     } catch (AbfsRestOperationException ex) {
       // Get ACL status is a HEAD request, its response doesn't contain 
errorCode
       // So can only rely on its status code to determine account type.
-      if (HttpURLConnection.HTTP_BAD_REQUEST != ex.getStatusCode()) {
+      int status = ex.getStatusCode();
+      String message = ex.getMessage();
+
+      // Case 1: 409: Soft delete not supported
+      if (status == HttpURLConnection.HTTP_CONFLICT &&
+              message != null &&
+              message.contains(ERR_SOFT_DELETE_NOT_SUPPORTED)) {
+        /*
+         * HTTP_CONFLICT with soft delete not supported error indicates a FNS 
account.
+         * This occurs when:
+         * 1. FNS-Blob endpoint is used (used with DFS endpoint for getAcl 
call)
+         * 2. FNS-DFS endpoint is used (later internally converted to Blob)
+         * For both cases, namespace should be disabled. No need to throw 
exception.

Review Comment:
   Also add a line that for both cases ultimately Blob endpoint will be used so 
this error is irrelevant as it comes only on DFS Endpoint



##########
hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azurebfs/AzureBlobFileSystemStore.java:
##########
@@ -422,17 +423,33 @@ private synchronized boolean 
getNamespaceEnabledInformationFromServer(
     } catch (AbfsRestOperationException ex) {
       // Get ACL status is a HEAD request, its response doesn't contain 
errorCode
       // So can only rely on its status code to determine account type.
-      if (HttpURLConnection.HTTP_BAD_REQUEST != ex.getStatusCode()) {
+      int status = ex.getStatusCode();
+      String message = ex.getMessage();
+
+      // Case 1: 409: Soft delete not supported
+      if (status == HttpURLConnection.HTTP_CONFLICT &&
+              message != null &&
+              message.contains(ERR_SOFT_DELETE_NOT_SUPPORTED)) {
+        /*
+         * HTTP_CONFLICT with soft delete not supported error indicates a FNS 
account.
+         * This occurs when:
+         * 1. FNS-Blob endpoint is used (used with DFS endpoint for getAcl 
call)

Review Comment:
   nit: used coming twice



##########
hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azurebfs/ITestGetNameSpaceEnabled.java:
##########
@@ -274,8 +278,11 @@ private void 
ensureGetAclDetermineHnsStatusAccuratelyInternal(int statusCode,
     AbfsClient mockClient = mock(AbfsClient.class);
     
store.getAbfsConfiguration().setIsNamespaceEnabledAccountForTesting(Trilean.UNKNOWN);
     doReturn(mockClient).when(store).getClient(AbfsServiceType.DFS);
+    String errorMsg = statusCode == HTTP_CONFLICT
+            ? ERR_SOFT_DELETE_NOT_SUPPORTED
+            : Integer.toString(statusCode);
     AbfsRestOperationException ex = new AbfsRestOperationException(
-        statusCode, null, Integer.toString(statusCode), null);
+        statusCode, null, errorMsg, null);
     doThrow(ex).when(mockClient).getAclStatus(anyString(), 
any(TracingContext.class));
 
     if (isExceptionExpected) {

Review Comment:
   Need some more testing no just mock.
   I understand that we can't control account's soft-delete feature but let's 
run all the integration tests on an account where soft-delete is enabled if not 
already done.
   
   And in integration tests we can assert that if error code returned by server 
can either be Bad request of htp conflict.





> ABFS: Forced DFS Endpoint Usage Causes Failure on FNS-Blob Accounts with Soft 
> Delete Enabled
> --------------------------------------------------------------------------------------------
>
>                 Key: HADOOP-19854
>                 URL: https://issues.apache.org/jira/browse/HADOOP-19854
>             Project: Hadoop Common
>          Issue Type: Bug
>          Components: fs/azure
>    Affects Versions: 3.5.0, 3.4.2, 3.4.3
>            Reporter: Manika Joshi
>            Assignee: Manika Joshi
>            Priority: Major
>              Labels: pull-request-available
>
> If _fs.azure.account.hns.enabled_ is not configured, ABFS driver issues a 
> getAcl call +using the DFS endpoint+ to detect the account type (HNS or FNS)
> For FNS Blob accounts with Soft Delete enabled, this behavior leads to 
> failures because the DFS endpoint used does not support Soft Delete semantics.
> Temporary fix is to explicitly set the configuration: 
> _fs.azure.account.hns.enabled_ so the redundant DFS-based detection is 
> bypassed and the issue does not occur.



--
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