You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-commits@hadoop.apache.org by su...@apache.org on 2012/10/29 15:17:29 UTC
svn commit: r1403306 - in
/hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs: ./
src/main/java/ src/main/java/org/apache/hadoop/hdfs/server/namenode/
src/main/native/ src/main/webapps/datanode/ src/main/webapps/hdfs/
src/main/webapps/sec...
Author: suresh
Date: Mon Oct 29 14:17:28 2012
New Revision: 1403306
URL: http://svn.apache.org/viewvc?rev=1403306&view=rev
Log:
Merging changes from trunk to pick HDFS-4124 changes.
Modified:
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/ (props changed)
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/ (props changed)
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeDirectory.java
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/native/ (props changed)
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/datanode/ (props changed)
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/ (props changed)
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/secondary/ (props changed)
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/test/hdfs/ (props changed)
Propchange: hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs:r1403175-1403305
Modified: hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt?rev=1403306&r1=1403305&r2=1403306&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt (original)
+++ hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt Mon Oct 29 14:17:28 2012
@@ -155,6 +155,9 @@ Trunk (Unreleased)
HDFS-4122. Cleanup HDFS logs and reduce the size of logged messages.
(suresh)
+ HDFS-4124. Refactor INodeDirectory#getExistingPathINodes() to enable
+ returningmore than INode array. (Jing Zhao via suresh)
+
OPTIMIZATIONS
BUG FIXES
Propchange: hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java:r1403175-1403305
Modified: hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java?rev=1403306&r1=1403305&r2=1403306&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java (original)
+++ hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java Mon Oct 29 14:17:28 2012
@@ -59,6 +59,7 @@ import org.apache.hadoop.hdfs.server.blo
import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.BlockUCState;
import org.apache.hadoop.hdfs.server.namenode.snapshot.INodeFileSnapshot;
import org.apache.hadoop.hdfs.server.namenode.snapshot.INodeFileWithLink;
+import org.apache.hadoop.hdfs.server.namenode.INodeDirectory.INodesInPath;
import org.apache.hadoop.hdfs.util.ByteArray;
import com.google.common.base.Preconditions;
@@ -594,8 +595,9 @@ public class FSDirectory implements Clos
}
byte[][] dstComponents = INode.getPathComponents(dst);
- INode[] dstInodes = new INode[dstComponents.length];
- rootDir.getExistingPathINodes(dstComponents, dstInodes, false);
+ INodesInPath dstInodesInPath = rootDir.getExistingPathINodes(dstComponents,
+ dstComponents.length, false);
+ INode[] dstInodes = dstInodesInPath.getINodes();
if (dstInodes[dstInodes.length-1] != null) {
NameNode.stateChangeLog.warn("DIR* FSDirectory.unprotectedRenameTo: "
+"failed to rename "+src+" to "+dst+
@@ -610,7 +612,7 @@ public class FSDirectory implements Clos
}
// Ensure dst has quota to accommodate rename
- verifyQuotaForRename(srcInodes,dstInodes);
+ verifyQuotaForRename(srcInodes, dstInodes);
INode dstChild = null;
INode srcChild = null;
@@ -714,8 +716,9 @@ public class FSDirectory implements Clos
throw new IOException(error);
}
final byte[][] dstComponents = INode.getPathComponents(dst);
- final INode[] dstInodes = new INode[dstComponents.length];
- rootDir.getExistingPathINodes(dstComponents, dstInodes, false);
+ INodesInPath dstInodesInPath = rootDir.getExistingPathINodes(dstComponents,
+ dstComponents.length, false);
+ final INode[] dstInodes = dstInodesInPath.getINodes();
INode dstInode = dstInodes[dstInodes.length - 1];
if (dstInodes.length == 1) {
error = "rename destination cannot be the root";
@@ -1513,12 +1516,13 @@ public class FSDirectory implements Clos
src = normalizePath(src);
String[] names = INode.getPathNames(src);
byte[][] components = INode.getPathComponents(names);
- INode[] inodes = new INode[components.length];
- final int lastInodeIndex = inodes.length - 1;
+ final int lastInodeIndex = components.length - 1;
writeLock();
try {
- rootDir.getExistingPathINodes(components, inodes, false);
+ INodesInPath inodesInPath = rootDir.getExistingPathINodes(components,
+ components.length, false);
+ INode[] inodes = inodesInPath.getINodes();
// find the index of the first null in inodes[]
StringBuilder pathbuilder = new StringBuilder();
@@ -1588,16 +1592,14 @@ public class FSDirectory implements Clos
return true;
}
- /**
- */
INode unprotectedMkdir(String src, PermissionStatus permissions,
long timestamp) throws QuotaExceededException,
UnresolvedLinkException {
assert hasWriteLock();
byte[][] components = INode.getPathComponents(src);
- INode[] inodes = new INode[components.length];
-
- rootDir.getExistingPathINodes(components, inodes, false);
+ INodesInPath inodesInPath = rootDir.getExistingPathINodes(components,
+ components.length, false);
+ INode[] inodes = inodesInPath.getINodes();
unprotectedMkdir(inodes, inodes.length-1, components[inodes.length-1],
permissions, timestamp);
return inodes[inodes.length-1];
@@ -1626,10 +1628,11 @@ public class FSDirectory implements Clos
byte[] path = components[components.length-1];
child.setLocalName(path);
cacheName(child);
- INode[] inodes = new INode[components.length];
writeLock();
try {
- rootDir.getExistingPathINodes(components, inodes, false);
+ INodesInPath inodesInPath = rootDir.getExistingPathINodes(components,
+ components.length, false);
+ INode[] inodes = inodesInPath.getINodes();
return addChild(inodes, inodes.length-1, child, childDiskspace);
} finally {
writeUnlock();
Modified: hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeDirectory.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeDirectory.java?rev=1403306&r1=1403305&r2=1403306&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeDirectory.java (original)
+++ hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeDirectory.java Mon Oct 29 14:17:28 2012
@@ -135,9 +135,9 @@ public class INodeDirectory extends INod
*/
private INode getNode(byte[][] components, boolean resolveLink
) throws UnresolvedLinkException {
- INode[] inode = new INode[1];
- getExistingPathINodes(components, inode, resolveLink);
- return inode[0];
+ INodesInPath inodesInPath = getExistingPathINodes(components, 1,
+ resolveLink);
+ return inodesInPath.inodes[0];
}
/**
@@ -185,27 +185,29 @@ public class INodeDirectory extends INod
* fill the array with [rootINode,c1,c2,null]
*
* @param components array of path component name
- * @param existing array to fill with existing INodes
+ * @param numOfINodes number of INodes to return
* @param resolveLink indicates whether UnresolvedLinkException should
* be thrown when the path refers to a symbolic link.
- * @return number of existing INodes in the path
+ * @return the specified number of existing INodes in the path
*/
- int getExistingPathINodes(byte[][] components, INode[] existing,
- boolean resolveLink) throws UnresolvedLinkException {
+ INodesInPath getExistingPathINodes(byte[][] components, int numOfINodes,
+ boolean resolveLink)
+ throws UnresolvedLinkException {
assert this.compareTo(components[0]) == 0 :
"Incorrect name " + getLocalName() + " expected "
+ (components[0] == null? null: DFSUtil.bytes2String(components[0]));
+ INodesInPath existing = new INodesInPath(numOfINodes);
INode curNode = this;
int count = 0;
- int index = existing.length - components.length;
+ int index = numOfINodes - components.length;
if (index > 0) {
index = 0;
}
while (count < components.length && curNode != null) {
final boolean lastComp = (count == components.length - 1);
if (index >= 0) {
- existing[index] = curNode;
+ existing.inodes[index] = curNode;
}
if (curNode.isLink() && (!lastComp || (lastComp && resolveLink))) {
final String path = constructPath(components, 0, components.length);
@@ -230,7 +232,7 @@ public class INodeDirectory extends INod
count++;
index++;
}
- return count;
+ return existing;
}
/**
@@ -251,11 +253,9 @@ public class INodeDirectory extends INod
INode[] getExistingPathINodes(String path, boolean resolveLink)
throws UnresolvedLinkException {
byte[][] components = getPathComponents(path);
- INode[] inodes = new INode[components.length];
-
- this.getExistingPathINodes(components, inodes, resolveLink);
-
- return inodes;
+ INodesInPath inodes = this.getExistingPathINodes(components,
+ components.length, resolveLink);
+ return inodes.inodes;
}
/**
@@ -346,9 +346,8 @@ public class INodeDirectory extends INod
if (pathComponents.length < 2) // add root
return null;
// Gets the parent INode
- INode[] inodes = new INode[2];
- getExistingPathINodes(pathComponents, inodes, false);
- INode inode = inodes[0];
+ INodesInPath inodes = getExistingPathINodes(pathComponents, 2, false);
+ INode inode = inodes.inodes[0];
if (inode == null) {
throw new FileNotFoundException("Parent path does not exist: "+
DFSUtil.byteArray2String(pathComponents));
@@ -452,4 +451,22 @@ public class INodeDirectory extends INod
children = null;
return total;
}
+
+ /**
+ * Used by
+ * {@link INodeDirectory#getExistingPathINodes(byte[][], int, boolean)}.
+ * Containing INodes information resolved from a given path.
+ */
+ static class INodesInPath {
+ private INode[] inodes;
+
+ public INodesInPath(int number) {
+ assert (number >= 0);
+ this.inodes = new INode[number];
+ }
+
+ INode[] getINodes() {
+ return inodes;
+ }
+ }
}
Propchange: hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/native/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/native:r1403175-1403305
Propchange: hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/datanode/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/datanode:r1403175-1403305
Propchange: hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs:r1403175-1403305
Propchange: hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/secondary/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/secondary:r1403175-1403305
Propchange: hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/test/hdfs/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/hdfs:r1403175-1403305