HADOOP-13840. Implement getUsed() for ViewFileSystem. Contributed by Manoj Govindassamy.
This commit is contained in:
parent
7226a71b1f
commit
1f7613be95
|
@ -858,6 +858,24 @@ public class ViewFileSystem extends FileSystem {
|
|||
return res.targetFileSystem.getStatus(p);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the total size of all files under "/", if {@link
|
||||
* Constants#CONFIG_VIEWFS_LINK_MERGE_SLASH} is supported and is a valid
|
||||
* mount point. Else, throw NotInMountpointException.
|
||||
*
|
||||
* @throws IOException
|
||||
*/
|
||||
@Override
|
||||
public long getUsed() throws IOException {
|
||||
InodeTree.ResolveResult<FileSystem> res = fsState.resolve(
|
||||
getUriPath(InodeTree.SlashPath), true);
|
||||
if (res.isInternalDir()) {
|
||||
throw new NotInMountpointException(InodeTree.SlashPath, "getUsed");
|
||||
} else {
|
||||
return res.targetFileSystem.getUsed();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* An instance of this class represents an internal dir of the viewFs
|
||||
* that is internal dir of the mount table.
|
||||
|
|
|
@ -1108,4 +1108,33 @@ abstract public class ViewFileSystemBaseTest {
|
|||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUsed() throws IOException {
|
||||
try {
|
||||
fsView.getUsed();
|
||||
fail("ViewFileSystem getUsed() should fail for slash root path when the" +
|
||||
" slash root mount point is not configured.");
|
||||
} catch (NotInMountpointException e) {
|
||||
// expected exception.
|
||||
}
|
||||
long usedSpaceByPathViaViewFs = fsView.getUsed(new Path("/user"));
|
||||
long usedSpaceByPathViaTargetFs =
|
||||
fsTarget.getUsed(new Path(targetTestRoot, "user"));
|
||||
assertEquals("Space used not matching between ViewFileSystem and " +
|
||||
"the mounted FileSystem!",
|
||||
usedSpaceByPathViaTargetFs, usedSpaceByPathViaViewFs);
|
||||
|
||||
Path mountDataRootPath = new Path("/data");
|
||||
String fsTargetFileName = "debug.log";
|
||||
Path fsTargetFilePath = new Path(targetTestRoot, "data/debug.log");
|
||||
Path mountDataFilePath = new Path(mountDataRootPath, fsTargetFileName);
|
||||
fileSystemTestHelper.createFile(fsTarget, fsTargetFilePath);
|
||||
|
||||
usedSpaceByPathViaViewFs = fsView.getUsed(mountDataFilePath);
|
||||
usedSpaceByPathViaTargetFs = fsTarget.getUsed(fsTargetFilePath);
|
||||
assertEquals("Space used not matching between ViewFileSystem and " +
|
||||
"the mounted FileSystem!",
|
||||
usedSpaceByPathViaTargetFs, usedSpaceByPathViaViewFs);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue