HDFS-7104. Fix and clarify INodeInPath getter functions. Contributed by Zhe Zhang.
This commit is contained in:
parent
b3d5d269a7
commit
f0293f11a8
|
@ -518,6 +518,8 @@ Release 2.6.0 - UNRELEASED
|
||||||
HDFS-4165. Faulty sanity check in FsDirectory.unprotectedSetQuota.
|
HDFS-4165. Faulty sanity check in FsDirectory.unprotectedSetQuota.
|
||||||
(Binglin Chang via suresh)
|
(Binglin Chang via suresh)
|
||||||
|
|
||||||
|
HDFS-7104. Fix and clarify INodeInPath getter functions. (Zhe Zhang via wang)
|
||||||
|
|
||||||
OPTIMIZATIONS
|
OPTIMIZATIONS
|
||||||
|
|
||||||
HDFS-6690. Deduplicate xattr names in memory. (wang)
|
HDFS-6690. Deduplicate xattr names in memory. (wang)
|
||||||
|
|
|
@ -133,7 +133,6 @@ public class INodesInPath {
|
||||||
* be thrown when the path refers to a symbolic link.
|
* be thrown when the path refers to a symbolic link.
|
||||||
* @return the specified number of existing INodes in the path
|
* @return the specified number of existing INodes in the path
|
||||||
*/
|
*/
|
||||||
// TODO: Eliminate null elements from inodes (to be provided by HDFS-7104)
|
|
||||||
static INodesInPath resolve(final INodeDirectory startingDir,
|
static INodesInPath resolve(final INodeDirectory startingDir,
|
||||||
final byte[][] components, final int numOfINodes,
|
final byte[][] components, final int numOfINodes,
|
||||||
final boolean resolveLink) throws UnresolvedLinkException {
|
final boolean resolveLink) throws UnresolvedLinkException {
|
||||||
|
@ -262,7 +261,8 @@ public class INodesInPath {
|
||||||
*/
|
*/
|
||||||
private boolean isSnapshot;
|
private boolean isSnapshot;
|
||||||
/**
|
/**
|
||||||
* Index of {@link INodeDirectoryWithSnapshot} for snapshot path, else -1
|
* index of the {@link Snapshot.Root} node in the inodes array,
|
||||||
|
* -1 for non-snapshot paths.
|
||||||
*/
|
*/
|
||||||
private int snapshotRootIndex;
|
private int snapshotRootIndex;
|
||||||
/**
|
/**
|
||||||
|
@ -312,15 +312,20 @@ public class INodesInPath {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the inodes array excluding the null elements.
|
* @return a new array of inodes excluding the null elements introduced by
|
||||||
|
* snapshot path elements. E.g., after resolving path "/dir/.snapshot",
|
||||||
|
* {@link #inodes} is {/, dir, null}, while the returned array only contains
|
||||||
|
* inodes of "/" and "dir". Note the length of the returned array is always
|
||||||
|
* equal to {@link #capacity}.
|
||||||
*/
|
*/
|
||||||
INode[] getINodes() {
|
INode[] getINodes() {
|
||||||
if (capacity < inodes.length) {
|
if (capacity == inodes.length) {
|
||||||
INode[] newNodes = new INode[capacity];
|
return inodes;
|
||||||
System.arraycopy(inodes, 0, newNodes, 0, capacity);
|
|
||||||
inodes = newNodes;
|
|
||||||
}
|
}
|
||||||
return inodes;
|
|
||||||
|
INode[] newNodes = new INode[capacity];
|
||||||
|
System.arraycopy(inodes, 0, newNodes, 0, capacity);
|
||||||
|
return newNodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -341,8 +346,8 @@ public class INodesInPath {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return index of the {@link INodeDirectoryWithSnapshot} in
|
* @return index of the {@link Snapshot.Root} node in the inodes array,
|
||||||
* {@link #inodes} for snapshot path, else -1.
|
* -1 for non-snapshot paths.
|
||||||
*/
|
*/
|
||||||
int getSnapshotRootIndex() {
|
int getSnapshotRootIndex() {
|
||||||
return this.snapshotRootIndex;
|
return this.snapshotRootIndex;
|
||||||
|
|
|
@ -215,7 +215,7 @@ public class TestSnapshotPathINodes {
|
||||||
// snapshotRootIndex should be -1.
|
// snapshotRootIndex should be -1.
|
||||||
assertSnapshot(nodesInPath, true, snapshot, -1);
|
assertSnapshot(nodesInPath, true, snapshot, -1);
|
||||||
// Check the INode for file1 (snapshot file)
|
// Check the INode for file1 (snapshot file)
|
||||||
assertINodeFile(nodesInPath.getLastINode(), file1);
|
assertINodeFile(inodes[inodes.length - 1], file1);
|
||||||
|
|
||||||
// Call getExistingPathINodes and request 2 INodes.
|
// Call getExistingPathINodes and request 2 INodes.
|
||||||
nodesInPath = INodesInPath.resolve(fsdir.rootDir, components, 2, false);
|
nodesInPath = INodesInPath.resolve(fsdir.rootDir, components, 2, false);
|
||||||
|
@ -224,7 +224,7 @@ public class TestSnapshotPathINodes {
|
||||||
// There should be two INodes in inodes: s1 and snapshot of file1. Thus the
|
// There should be two INodes in inodes: s1 and snapshot of file1. Thus the
|
||||||
// SnapshotRootIndex should be 0.
|
// SnapshotRootIndex should be 0.
|
||||||
assertSnapshot(nodesInPath, true, snapshot, 0);
|
assertSnapshot(nodesInPath, true, snapshot, 0);
|
||||||
assertINodeFile(nodesInPath.getLastINode(), file1);
|
assertINodeFile(inodes[inodes.length - 1], file1);
|
||||||
|
|
||||||
// Resolve the path "/TestSnapshot/sub1/.snapshot"
|
// Resolve the path "/TestSnapshot/sub1/.snapshot"
|
||||||
String dotSnapshotPath = sub1.toString() + "/.snapshot";
|
String dotSnapshotPath = sub1.toString() + "/.snapshot";
|
||||||
|
@ -239,7 +239,7 @@ public class TestSnapshotPathINodes {
|
||||||
// No SnapshotRoot dir is included in the resolved inodes
|
// No SnapshotRoot dir is included in the resolved inodes
|
||||||
assertSnapshot(nodesInPath, true, snapshot, -1);
|
assertSnapshot(nodesInPath, true, snapshot, -1);
|
||||||
// The last INode should be the INode for sub1
|
// The last INode should be the INode for sub1
|
||||||
final INode last = nodesInPath.getLastINode();
|
final INode last = inodes[inodes.length - 1];
|
||||||
assertEquals(last.getFullPathName(), sub1.toString());
|
assertEquals(last.getFullPathName(), sub1.toString());
|
||||||
assertFalse(last instanceof INodeFile);
|
assertFalse(last instanceof INodeFile);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue