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 2013/04/24 16:28:58 UTC
svn commit: r1471433 - in
/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs: ./
src/main/java/org/apache/hadoop/hdfs/server/namenode/
src/test/java/org/apache/hadoop/hdfs/server/namenode/
Author: suresh
Date: Wed Apr 24 14:28:58 2013
New Revision: 1471433
URL: http://svn.apache.org/r1471433
Log:
HDFS-4129. Merge r1403956 from trunk
Added:
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFSDirectory.java
- copied unchanged from r1403956, hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFSDirectory.java
Modified:
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INode.java
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeDirectory.java
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFsLimits.java
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt?rev=1471433&r1=1471432&r2=1471433&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt (original)
+++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt Wed Apr 24 14:28:58 2013
@@ -53,6 +53,9 @@ Release 2.0.5-beta - UNRELEASED
HDFS-3817. Avoid printing SafeModeException stack trace.
(Brandon Li via suresh)
+ HDFS-4129. Add utility methods to dump NameNode in memory tree for
+ testing. (szetszwo via suresh)
+
OPTIMIZATIONS
BUG FIXES
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java?rev=1471433&r1=1471432&r2=1471433&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java (original)
+++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java Wed Apr 24 14:28:58 2013
@@ -5574,7 +5574,11 @@ public class FSNamesystem implements Nam
public BlockManager getBlockManager() {
return blockManager;
}
-
+ /** @return the FSDirectory. */
+ public FSDirectory getFSDirectory() {
+ return dir;
+ }
+
/**
* Verifies that the given identifier and password are valid and match.
* @param identifier Token identifier.
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INode.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INode.java?rev=1471433&r1=1471432&r2=1471433&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INode.java (original)
+++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INode.java Wed Apr 24 14:28:58 2013
@@ -17,6 +17,8 @@
*/
package org.apache.hadoop.hdfs.server.namenode;
+import java.io.PrintWriter;
+import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -32,6 +34,7 @@ import org.apache.hadoop.hdfs.protocol.B
import org.apache.hadoop.hdfs.server.blockmanagement.BlockInfo;
import org.apache.hadoop.util.StringUtils;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.primitives.SignedBytes;
/**
@@ -227,11 +230,10 @@ abstract class INode implements Comparab
abstract DirCounts spaceConsumedInTree(DirCounts counts);
/**
- * Get local file name
- * @return local file name
+ * @return null if the local name is null; otherwise, return the local name.
*/
String getLocalName() {
- return DFSUtil.bytes2String(name);
+ return name == null? null: DFSUtil.bytes2String(name);
}
@@ -245,8 +247,8 @@ abstract class INode implements Comparab
}
/**
- * Get local file name
- * @return local file name
+ * @return null if the local name is null;
+ * otherwise, return the local name byte array.
*/
byte[] getLocalNameBytes() {
return name;
@@ -464,4 +466,30 @@ abstract class INode implements Comparab
return new INodeFile(permissions, blocks, replication,
modificationTime, atime, preferredBlockSize);
}
+
+ /**
+ * Dump the subtree starting from this inode.
+ * @return a text representation of the tree.
+ */
+ @VisibleForTesting
+ public StringBuffer dumpTreeRecursively() {
+ final StringWriter out = new StringWriter();
+ dumpTreeRecursively(new PrintWriter(out, true), new StringBuilder());
+ return out.getBuffer();
+ }
+
+ /**
+ * Dump tree recursively.
+ * @param prefix The prefix string that each line should print.
+ */
+ @VisibleForTesting
+ public void dumpTreeRecursively(PrintWriter out, StringBuilder prefix) {
+ out.print(prefix);
+ out.print(" ");
+ out.print(getLocalName());
+ out.print(" (");
+ final String s = super.toString();
+ out.print(s.substring(s.lastIndexOf(getClass().getSimpleName())));
+ out.println(")");
+ }
}
Modified: hadoop/common/branches/branch-2/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/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeDirectory.java?rev=1471433&r1=1471432&r2=1471433&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeDirectory.java (original)
+++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeDirectory.java Wed Apr 24 14:28:58 2013
@@ -19,6 +19,7 @@ package org.apache.hadoop.hdfs.server.na
import java.io.FileNotFoundException;
import java.io.IOException;
+import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -29,6 +30,8 @@ import org.apache.hadoop.hdfs.DFSUtil;
import org.apache.hadoop.hdfs.protocol.Block;
import org.apache.hadoop.hdfs.protocol.UnresolvedPathException;
+import com.google.common.annotations.VisibleForTesting;
+
/**
* Directory INode class.
*/
@@ -441,4 +444,52 @@ class INodeDirectory extends INode {
children = null;
return total;
}
+
+ /*
+ * The following code is to dump the tree recursively for testing.
+ *
+ * \- foo (INodeDirectory@33dd2717)
+ * \- sub1 (INodeDirectory@442172)
+ * +- file1 (INodeFile@78392d4)
+ * +- file2 (INodeFile@78392d5)
+ * +- sub11 (INodeDirectory@8400cff)
+ * \- file3 (INodeFile@78392d6)
+ * \- z_file4 (INodeFile@45848712)
+ */
+ static final String DUMPTREE_EXCEPT_LAST_ITEM = "+-";
+ static final String DUMPTREE_LAST_ITEM = "\\-";
+ @VisibleForTesting
+ @Override
+ public void dumpTreeRecursively(PrintWriter out, StringBuilder prefix) {
+ super.dumpTreeRecursively(out, prefix);
+ if (prefix.length() >= 2) {
+ prefix.setLength(prefix.length() - 2);
+ prefix.append(" ");
+ }
+ dumpTreeRecursively(out, prefix, children);
+ }
+
+ /**
+ * Dump the given subtrees.
+ * @param prefix The prefix string that each line should print.
+ * @param subs The subtrees.
+ */
+ @VisibleForTesting
+ protected static void dumpTreeRecursively(PrintWriter out,
+ StringBuilder prefix, List<? extends INode> subs) {
+ prefix.append(DUMPTREE_EXCEPT_LAST_ITEM);
+ if (subs != null && subs.size() != 0) {
+ int i = 0;
+ for(; i < subs.size() - 1; i++) {
+ subs.get(i).dumpTreeRecursively(out, prefix);
+ prefix.setLength(prefix.length() - 2);
+ prefix.append(DUMPTREE_EXCEPT_LAST_ITEM);
+ }
+
+ prefix.setLength(prefix.length() - 2);
+ prefix.append(DUMPTREE_LAST_ITEM);
+ subs.get(i).dumpTreeRecursively(out, prefix);
+ }
+ prefix.setLength(prefix.length() - 2);
+ }
}
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFsLimits.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFsLimits.java?rev=1471433&r1=1471432&r2=1471433&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFsLimits.java (original)
+++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFsLimits.java Wed Apr 24 14:28:58 2013
@@ -32,7 +32,6 @@ import org.apache.hadoop.fs.permission.F
import org.apache.hadoop.fs.permission.PermissionStatus;
import org.apache.hadoop.hdfs.DFSConfigKeys;
import org.apache.hadoop.hdfs.MiniDFSCluster;
-import org.apache.hadoop.hdfs.protocol.FSLimitException;
import org.apache.hadoop.hdfs.protocol.FSLimitException.MaxDirectoryItemsExceededException;
import org.apache.hadoop.hdfs.protocol.FSLimitException.PathComponentTooLongException;
import org.apache.hadoop.hdfs.protocol.QuotaExceededException;
@@ -60,17 +59,11 @@ public class TestFsLimits {
return fsn;
}
- private static class TestFSDirectory extends FSDirectory {
- public TestFSDirectory() throws IOException {
+ private static class MockFSDirectory extends FSDirectory {
+ public MockFSDirectory() throws IOException {
super(new FSImage(conf), getMockNamesystem(), conf);
setReady(fsIsReady);
}
-
- @Override
- public <T extends INode> void verifyFsLimits(INode[] pathComponents,
- int pos, T child) throws FSLimitException {
- super.verifyFsLimits(pathComponents, pos, child);
- }
}
@Before
@@ -157,7 +150,7 @@ public class TestFsLimits {
private void addChildWithName(String name, Class<?> expected)
throws Exception {
// have to create after the caller has had a chance to set conf values
- if (fs == null) fs = new TestFSDirectory();
+ if (fs == null) fs = new MockFSDirectory();
INode child = new INodeDirectory(name, perms);
child.setLocalName(name);