anmolanmol1234 commented on code in PR #8212:
URL: https://github.com/apache/hadoop/pull/8212#discussion_r2740472234
##########
hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azurebfs/AzureBlobFileSystemStore.java:
##########
@@ -890,66 +905,79 @@ public AbfsInputStream openFileForRead(Path path,
FileStatus fileStatus = parameters.map(OpenFileParameters::getStatus)
.orElse(null);
String relativePath = getRelativePath(path);
- String resourceType, eTag;
- long contentLength;
+ String resourceType, eTag = EMPTY_STRING;
+ long contentLength = 0;
ContextEncryptionAdapter contextEncryptionAdapter =
NoContextEncryptionAdapter.getInstance();
/*
* GetPathStatus API has to be called in case of:
- * 1. fileStatus is null or not an object of VersionedFileStatus: as
eTag
- * would not be there in the fileStatus object.
+ * 1. restrictGpsOnOpenFile config is disabled AND fileStatus is null
or not
+ * an object of VersionedFileStatus: as eTag would not be there in
the fileStatus object.
* 2. fileStatus is an object of VersionedFileStatus and the object
doesn't
* have encryptionContext field when client's encryptionType is
* ENCRYPTION_CONTEXT.
*/
if ((fileStatus instanceof VersionedFileStatus) && (
- getClient().getEncryptionType() != EncryptionType.ENCRYPTION_CONTEXT
- || ((VersionedFileStatus) fileStatus).getEncryptionContext()
- != null)) {
+ getClient().getEncryptionType() !=
EncryptionType.ENCRYPTION_CONTEXT
+ || ((VersionedFileStatus)
fileStatus).getEncryptionContext()
+ != null)) {
path = path.makeQualified(this.uri, path);
Preconditions.checkArgument(fileStatus.getPath().equals(path),
- String.format(
- "Filestatus path [%s] does not match with given path [%s]",
- fileStatus.getPath(), path));
+ String.format(
+ "Filestatus path [%s] does not match with given path
[%s]",
+ fileStatus.getPath(), path));
resourceType = fileStatus.isFile() ? FILE : DIRECTORY;
contentLength = fileStatus.getLen();
eTag = ((VersionedFileStatus) fileStatus).getVersion();
final String encryptionContext
- = ((VersionedFileStatus) fileStatus).getEncryptionContext();
+ = ((VersionedFileStatus) fileStatus).getEncryptionContext();
if (getClient().getEncryptionType() ==
EncryptionType.ENCRYPTION_CONTEXT) {
contextEncryptionAdapter = new ContextProviderEncryptionAdapter(
- getClient().getEncryptionContextProvider(),
getRelativePath(path),
- encryptionContext.getBytes(StandardCharsets.UTF_8));
+ getClient().getEncryptionContextProvider(),
getRelativePath(path),
+ encryptionContext.getBytes(StandardCharsets.UTF_8));
}
- } else {
+ if (parseIsDirectory(resourceType)) {
+ throw openFileForReadDirectoryException();
+ }
+ }
+ /*
+ * If file created with ENCRYPTION_CONTEXT, irrespective of whether
isRestrictGpsOnOpenFile config is enabled or not,
+ * GetPathStatus API has to be called to get the encryptionContext from
the response header
+ */
+ else if (getClient().getEncryptionType() ==
EncryptionType.ENCRYPTION_CONTEXT
+ || !getAbfsConfiguration().shouldRestrictGpsOnOpenFile()) {
+
AbfsHttpOperation op = getClient().getPathStatus(relativePath, false,
- tracingContext, null).getResult();
- resourceType = getClient().checkIsDir(op) ? DIRECTORY : FILE;
- contentLength = extractContentLength(op);
- eTag = op.getResponseHeader(HttpHeaderConfigurations.ETAG);
+ tracingContext, null).getResult();
/*
* For file created with ENCRYPTION_CONTEXT, client shall receive
* encryptionContext from header field: X_MS_ENCRYPTION_CONTEXT.
*/
if (getClient().getEncryptionType() ==
EncryptionType.ENCRYPTION_CONTEXT) {
final String fileEncryptionContext = op.getResponseHeader(
- HttpHeaderConfigurations.X_MS_ENCRYPTION_CONTEXT);
+ 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");
+ "EncryptionContext not present in GetPathStatus response
headers");
}
contextEncryptionAdapter = new ContextProviderEncryptionAdapter(
- getClient().getEncryptionContextProvider(),
getRelativePath(path),
- fileEncryptionContext.getBytes(StandardCharsets.UTF_8));
+ getClient().getEncryptionContextProvider(),
getRelativePath(path),
Review Comment:
same as above
--
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]