HADOOP-13840. Implement getUsed() for ViewFileSystem. Contributed by Manoj Govindassamy.
This commit is contained in:
parent
7226a71b1f
commit
1f7613be95
@ -858,6 +858,24 @@ public FsStatus getStatus(Path p) throws IOException {
|
|||||||
return res.targetFileSystem.getStatus(p);
|
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
|
* An instance of this class represents an internal dir of the viewFs
|
||||||
* that is internal dir of the mount table.
|
* that is internal dir of the mount table.
|
||||||
|
@ -1108,4 +1108,33 @@ public Object run() throws IOException {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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
Block a user