HADOOP-15940. ABFS: For HNS account, avoid unnecessary get call when doing Rename.

Contributed by Da Zhou <da.zhou@microsoft.com>

(cherry picked from commit 1a3a4960d91aa594283e447963fb2e407d4c6af5)
This commit is contained in:
Da Zhou 2018-11-27 18:13:07 +00:00 committed by Steve Loughran
parent 96c104d365
commit 300f772c36
No known key found for this signature in database
GPG Key ID: D22CF846DBB162A0

View File

@ -271,22 +271,44 @@ public boolean rename(final Path src, final Path dst) throws IOException {
if (parentFolder == null) {
return false;
}
Path qualifiedSrcPath = makeQualified(src);
Path qualifiedDstPath = makeQualified(dst);
// rename under same folder;
if(makeQualified(parentFolder).equals(qualifiedDstPath)) {
return tryGetFileStatus(qualifiedSrcPath) != null;
}
FileStatus dstFileStatus = null;
if (qualifiedSrcPath.equals(qualifiedDstPath)) {
// rename to itself
// - if it doesn't exist, return false
// - if it is file, return true
// - if it is dir, return false.
dstFileStatus = tryGetFileStatus(qualifiedDstPath);
if (dstFileStatus == null) {
return false;
}
return dstFileStatus.isDirectory() ? false : true;
}
// Non-HNS account need to check dst status on driver side.
if (!abfsStore.getIsNamespaceEnabled() && dstFileStatus == null) {
dstFileStatus = tryGetFileStatus(qualifiedDstPath);
}
final FileStatus dstFileStatus = tryGetFileStatus(dst);
try {
String sourceFileName = src.getName();
Path adjustedDst = dst;
if (dstFileStatus != null) {
if (!dstFileStatus.isDirectory()) {
return src.equals(dst);
return qualifiedSrcPath.equals(qualifiedDstPath);
}
adjustedDst = new Path(dst, sourceFileName);
}
Path qualifiedSrcPath = makeQualified(src);
Path qualifiedDstPath = makeQualified(adjustedDst);
qualifiedDstPath = makeQualified(adjustedDst);
performAbfsAuthCheck(FsAction.READ_WRITE, qualifiedSrcPath, qualifiedDstPath);
abfsStore.rename(qualifiedSrcPath, qualifiedDstPath);