HDFS-12171. Reduce IIP object allocations for inode lookup. Contributed by Daryn Sharp.

This commit is contained in:
Kihwal Lee 2017-07-25 11:03:09 -05:00
parent 6d983cca52
commit a68b5b31cf
4 changed files with 8 additions and 26 deletions

View File

@ -209,9 +209,8 @@ private EncryptionZoneInt getEncryptionZoneForPath(INodesInPath iip) {
if (!hasCreatedEncryptionZone()) {
return null;
}
List<INode> inodes = iip.getReadOnlyINodes();
for (int i = inodes.size() - 1; i >= 0; i--) {
final INode inode = inodes.get(i);
for (int i = iip.length() - 1; i >= 0; i--) {
final INode inode = iip.getINode(i);
if (inode != null) {
final EncryptionZoneInt ezi = encryptionZones.get(inode.getId());
if (ezi != null) {

View File

@ -355,9 +355,8 @@ private static ErasureCodingPolicy getErasureCodingPolicyForPath(
Preconditions.checkNotNull(iip, "INodes cannot be null");
fsd.readLock();
try {
List<INode> inodes = iip.getReadOnlyINodes();
for (int i = inodes.size() - 1; i >= 0; i--) {
final INode inode = inodes.get(i);
for (int i = iip.length() - 1; i >= 0; i--) {
final INode inode = iip.getINode(i);
if (inode == null) {
continue;
}

View File

@ -18,9 +18,6 @@
package org.apache.hadoop.hdfs.server.namenode;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.NoSuchElementException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@ -336,17 +333,9 @@ public int getPathSnapshotId() {
* otherwise, i < 0, return the (length + i)-th inode.
*/
public INode getINode(int i) {
if (inodes == null || inodes.length == 0) {
throw new NoSuchElementException("inodes is null or empty");
}
int index = i >= 0 ? i : inodes.length + i;
if (index < inodes.length && index >= 0) {
return inodes[index];
} else {
throw new NoSuchElementException("inodes.length == " + inodes.length);
}
return inodes[(i < 0) ? inodes.length + i : i];
}
/** @return the last inode. */
public INode getLastINode() {
return getINode(-1);
@ -384,10 +373,6 @@ public int length() {
return inodes.length;
}
public List<INode> getReadOnlyINodes() {
return Collections.unmodifiableList(Arrays.asList(inodes));
}
public INode[] getINodesArray() {
INode[] retArr = new INode[inodes.length];
System.arraycopy(inodes, 0, retArr, 0, inodes.length);

View File

@ -310,9 +310,8 @@ public void testSnapshotPathINodesAfterDeletion() throws Exception {
}
private int getNumNonNull(INodesInPath iip) {
List<INode> inodes = iip.getReadOnlyINodes();
for (int i = inodes.size() - 1; i >= 0; i--) {
if (inodes.get(i) != null) {
for (int i = iip.length() - 1; i >= 0; i--) {
if (iip.getINode(i) != null) {
return i+1;
}
}