anmolanmol1234 commented on code in PR #8212:
URL: https://github.com/apache/hadoop/pull/8212#discussion_r3007977204


##########
hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azurebfs/services/AbfsInputStream.java:
##########
@@ -561,11 +579,73 @@ protected int readInternal(final long position, final 
byte[] b, final int offset
     }
   }
 
+  /**
+   * Convert a {@link Path} to the relative path string used by ABFS.
+   *
+   * <p>This returns the URI path component of the supplied {@code path}. If 
the
+   * resulting path is empty, this method returns {@code ROOT_PATH}.
+   *
+   * @param path the {@link Path} to convert; must not be null
+   * @return the relative path as a {@link String}; never null
+   */
+  String getRelativePath(final Path path) {
+    Preconditions.checkNotNull(path, "path");
+    String relPath = path.toUri().getPath();
+    if (relPath.isEmpty()) {
+      // This means that path passed by user is absolute path of root without 
"/" at end.
+      relPath = ROOT_PATH;
+    }
+    return relPath;
+  }
+
+  /**
+   * Creates an exception indicating that a read operation was attempted on a 
directory.
+   *
+   * @return an {@link AbfsRestOperationException} indicating the operation is 
not permitted on a directory
+   */
+  private IOException directoryReadException() {
+    return new AbfsRestOperationException(
+            AzureServiceErrorCode.PATH_NOT_FOUND.getStatusCode(),
+            AzureServiceErrorCode.PATH_NOT_FOUND.getErrorCode(),
+            readOnDirectoryErrorMsg,
+            null);
+  }
+
+  /**
+   * Checks if the current path is a directory (for both implicit and 
explicit) in FNS account.
+   * If the path is a directory, throws an exception indicating that read 
operations are not permitted.
+   *
+   * @throws IOException if the path is a directory or if there is an error 
accessing the path status
+   */
+  private void checkIfDirPathInFNS() throws IOException {
+    AbfsHttpOperation gpsOp = client.getPathStatus(
+            getRelativePath(new Path(path)),
+            false,
+            tracingContext,
+            contextEncryptionAdapter).getResult();
+
+    if (client.checkIsDir(gpsOp)) {
+      throw directoryReadException();
+    }
+  }
+
+  private long extractContentLength(AbfsHttpOperation op) {
+    // We need to use content range header instead of content length to take 
care of partial reads
+    String contentRange = 
op.getResponseHeader(HttpHeaderConfigurations.CONTENT_RANGE);
+    if (!StringUtils.isEmpty(contentRange)) {
+      contentLength = 
Long.parseLong(contentRange.split(AbfsHttpConstants.FORWARD_SLASH)[1]);
+    }
+    else {

Review Comment:
   better to initialize contentLength with 0 and return as is instead of else



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


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

Reply via email to