HDFS-15591. RBF: Fix webHdfs file display error. Contributed by wangzhaohui.

(cherry picked from commit fc8a6dd8a9)
This commit is contained in:
Ayush Saxena 2020-09-28 23:55:31 +05:30 committed by Wei-Chiu Chuang
parent f5cc1540b4
commit 2da3356428
2 changed files with 36 additions and 2 deletions

View File

@ -1977,7 +1977,8 @@ private static FsPermission getParentPermission(final FsPermission mask) {
* @param date Map with the dates.
* @return New HDFS file status representing a mount point.
*/
private HdfsFileStatus getMountPointStatus(
@VisibleForTesting
HdfsFileStatus getMountPointStatus(
String name, int childrenNum, long date) {
long modTime = date;
long accessTime = date;
@ -2028,6 +2029,8 @@ private HdfsFileStatus getMountPointStatus(
}
}
long inodeId = 0;
Path path = new Path(name);
String nameStr = path.getName();
return new HdfsFileStatus.Builder()
.isdir(true)
.mtime(modTime)
@ -2036,7 +2039,7 @@ private HdfsFileStatus getMountPointStatus(
.owner(owner)
.group(group)
.symlink(new byte[0])
.path(DFSUtil.string2Bytes(name))
.path(DFSUtil.string2Bytes(nameStr))
.fileId(inodeId)
.children(childrenNum)
.flags(flags)

View File

@ -290,6 +290,37 @@ public void testGetMountPointStatusWithIOException()
}
}
/**
* Verify the getMountPointStatus result of passing in different parameters.
*/
@Test
public void testGetMountPointStatus() throws IOException {
MountTable addEntry = MountTable.newInstance("/testA/testB/testC/testD",
Collections.singletonMap("ns0", "/testA/testB/testC/testD"));
assertTrue(addMountTable(addEntry));
RouterClientProtocol clientProtocol = new RouterClientProtocol(
nnFs0.getConf(), routerContext.getRouter().getRpcServer());
String src = "/";
String child = "testA";
Path childPath = new Path(src, child);
HdfsFileStatus dirStatus =
clientProtocol.getMountPointStatus(childPath.toString(), 0, 0);
assertEquals(child, dirStatus.getLocalName());
String src1 = "/testA";
String child1 = "testB";
Path childPath1 = new Path(src1, child1);
HdfsFileStatus dirStatus1 =
clientProtocol.getMountPointStatus(childPath1.toString(), 0, 0);
assertEquals(child1, dirStatus1.getLocalName());
String src2 = "/testA/testB";
String child2 = "testC";
Path childPath2 = new Path(src2, child2);
HdfsFileStatus dirStatus2 =
clientProtocol.getMountPointStatus(childPath2.toString(), 0, 0);
assertEquals(child2, dirStatus2.getLocalName());
}
/**
* GetListing of testPath through router.
*/