HADOOP-13840. Implement getUsed() for ViewFileSystem. Contributed by Manoj Govindassamy.

This commit is contained in:
Andrew Wang 2016-11-30 17:55:12 -08:00
parent 7226a71b1f
commit 1f7613be95
2 changed files with 47 additions and 0 deletions

View File

@ -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.

View File

@ -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);
}
}