[ https://issues.apache.org/jira/browse/HADOOP-19139?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17867189#comment-17867189 ]
ASF GitHub Bot commented on HADOOP-19139: ----------------------------------------- saxenapranav commented on code in PR #6699: URL: https://github.com/apache/hadoop/pull/6699#discussion_r1683878338 ########## hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azurebfs/AzureBlobFileSystemStore.java: ########## @@ -890,32 +891,37 @@ public AbfsInputStream openFileForRead(Path path, encryptionContext.getBytes(StandardCharsets.UTF_8)); } } else { - AbfsHttpOperation op = client.getPathStatus(relativePath, false, - tracingContext, null).getResult(); - resourceType = op.getResponseHeader( - HttpHeaderConfigurations.X_MS_RESOURCE_TYPE); - contentLength = Long.parseLong( - op.getResponseHeader(HttpHeaderConfigurations.CONTENT_LENGTH)); - eTag = op.getResponseHeader(HttpHeaderConfigurations.ETAG); - /* - * For file created with ENCRYPTION_CONTEXT, client shall receive - * encryptionContext from header field: X_MS_ENCRYPTION_CONTEXT. - */ - if (client.getEncryptionType() == EncryptionType.ENCRYPTION_CONTEXT) { - final String fileEncryptionContext = op.getResponseHeader( - HttpHeaderConfigurations.X_MS_ENCRYPTION_CONTEXT); - if (fileEncryptionContext == null) { - LOG.debug("EncryptionContext missing in GetPathStatus response"); - throw new PathIOException(path.toString(), - "EncryptionContext not present in GetPathStatus response headers"); + if (client.getEncryptionType() == EncryptionType.ENCRYPTION_CONTEXT Review Comment: I completely understand that logic has become bit messy and not easy to read. Have refactored the logic. Hope the new logic is more readable and understandable: ``` if (fileStatus instanceof VersionedFileStatus) { VersionedFileStatus versionedFileStatus = (VersionedFileStatus) fileStatus; path = path.makeQualified(this.uri, path); Preconditions.checkArgument(fileStatus.getPath().equals(path), "Filestatus path [%s] does not match with given path [%s]", fileStatus.getPath(), path); resourceType = fileStatus.isFile() ? FILE : DIRECTORY; contentLength = fileStatus.getLen(); eTag = versionedFileStatus.getVersion(); encryptionContext = versionedFileStatus.getEncryptionContext(); } if (client.getEncryptionType() == EncryptionType.ENCRYPTION_CONTEXT) { if (encryptionContext == null) { PathInformation pathInformation = getPathInformation(relativePath, tracingContext); resourceType = pathInformation.getResourceType(); contentLength = Long.parseLong(pathInformation.getContentLength()); eTag = pathInformation.getETag(); encryptionContext = pathInformation.getEncryptionContext(); if (encryptionContext == null) { LOG.debug("EncryptionContext missing in GetPathStatus response"); throw new PathIOException(path.toString(), "EncryptionContext not present in GetPathStatus response headers"); } } contextEncryptionAdapter = new ContextProviderEncryptionAdapter( client.getEncryptionContextProvider(), getRelativePath(path), encryptionContext.getBytes(StandardCharsets.UTF_8)); } else if (fileStatus == null && !abfsConfiguration.isInputStreamLazyOptimizationEnabled()) { PathInformation pathInformation = getPathInformation(relativePath, tracingContext); resourceType = pathInformation.getResourceType(); contentLength = Long.parseLong(pathInformation.getContentLength()); eTag = pathInformation.getETag(); } if (parseIsDirectory(resourceType)) { throw new AbfsRestOperationException( AzureServiceErrorCode.PATH_NOT_FOUND.getStatusCode(), AzureServiceErrorCode.PATH_NOT_FOUND.getErrorCode(), "openFileForRead must be used with files and not directories", null); } ``` > [ABFS]: No GetPathStatus call for opening AbfsInputStream > --------------------------------------------------------- > > Key: HADOOP-19139 > URL: https://issues.apache.org/jira/browse/HADOOP-19139 > Project: Hadoop Common > Issue Type: Sub-task > Components: fs/azure > Reporter: Pranav Saxena > Assignee: Pranav Saxena > Priority: Major > Labels: pull-request-available > > Read API gives contentLen and etag of the path. This information would be > used in future calls on that inputStream. Prior information of eTag is of not > much importance. -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-issues-h...@hadoop.apache.org