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 sz...@apache.org on 2011/04/13 20:27:02 UTC
svn commit: r1091874 - in /hadoop/hdfs/trunk: CHANGES.txt
src/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java
src/java/org/apache/hadoop/hdfs/server/namenode/INode.java
src/test/unit/org/apache/hadoop/hdfs/server/namenode/TestINodeFile.java
Author: szetszwo
Date: Wed Apr 13 18:27:01 2011
New Revision: 1091874
URL: http://svn.apache.org/viewvc?rev=1091874&view=rev
Log:
HDFS-1760. In FSDirectory.getFullPathName(..), it is better to return "/" for root directory instead of an empty string. Contributed by Daryn Sharp
Modified:
hadoop/hdfs/trunk/CHANGES.txt
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/INode.java
hadoop/hdfs/trunk/src/test/unit/org/apache/hadoop/hdfs/server/namenode/TestINodeFile.java
Modified: hadoop/hdfs/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hdfs/trunk/CHANGES.txt?rev=1091874&r1=1091873&r2=1091874&view=diff
==============================================================================
--- hadoop/hdfs/trunk/CHANGES.txt (original)
+++ hadoop/hdfs/trunk/CHANGES.txt Wed Apr 13 18:27:01 2011
@@ -106,6 +106,9 @@ Trunk (unreleased changes)
HDFS-1817. Move pipeline_Fi_[39-51] from TestFiDataTransferProtocol
to TestFiPipelineClose. (szetszwo)
+ HDFS-1760. In FSDirectory.getFullPathName(..), it is better to return "/"
+ for root directory instead of an empty string. (Daryn Sharp via szetszwo)
+
OPTIMIZATIONS
HDFS-1458. Improve checkpoint performance by avoiding unnecessary image
Modified: hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java
URL: http://svn.apache.org/viewvc/hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java?rev=1091874&r1=1091873&r2=1091874&view=diff
==============================================================================
--- hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java (original)
+++ hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java Wed Apr 13 18:27:01 2011
@@ -1385,6 +1385,12 @@ class FSDirectory implements Closeable {
/** Return the name of the path represented by inodes at [0, pos] */
private static String getFullPathName(INode[] inodes, int pos) {
StringBuilder fullPathName = new StringBuilder();
+ if (inodes[0].isRoot()) {
+ if (pos == 0) return Path.SEPARATOR;
+ } else {
+ fullPathName.append(inodes[0].getLocalName());
+ }
+
for (int i=1; i<=pos; i++) {
fullPathName.append(Path.SEPARATOR_CHAR).append(inodes[i].getLocalName());
}
Modified: hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/INode.java
URL: http://svn.apache.org/viewvc/hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/INode.java?rev=1091874&r1=1091873&r2=1091874&view=diff
==============================================================================
--- hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/INode.java (original)
+++ hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/INode.java Wed Apr 13 18:27:01 2011
@@ -233,12 +233,8 @@ abstract class INode implements Comparab
String getLocalParentDir() {
- INode p_node=getParent();
-
- if(p_node == null)
- return "/";
- else
- return p_node.getFullPathName();
+ INode inode = isRoot() ? this : getParent();
+ return (inode != null) ? inode.getFullPathName() : "";
}
/**
@@ -271,12 +267,7 @@ abstract class INode implements Comparab
/** {@inheritDoc} */
public String toString() {
- String i_path=getFullPathName();
-
- if(i_path.length() == 0)
- i_path="/";
-
- return "\"" + i_path + "\":"
+ return "\"" + getFullPathName() + "\":"
+ getUserName() + ":" + getGroupName() + ":"
+ (isDirectory()? "d": "-") + getFsPermission();
}
Modified: hadoop/hdfs/trunk/src/test/unit/org/apache/hadoop/hdfs/server/namenode/TestINodeFile.java
URL: http://svn.apache.org/viewvc/hadoop/hdfs/trunk/src/test/unit/org/apache/hadoop/hdfs/server/namenode/TestINodeFile.java?rev=1091874&r1=1091873&r2=1091874&view=diff
==============================================================================
--- hadoop/hdfs/trunk/src/test/unit/org/apache/hadoop/hdfs/server/namenode/TestINodeFile.java (original)
+++ hadoop/hdfs/trunk/src/test/unit/org/apache/hadoop/hdfs/server/namenode/TestINodeFile.java Wed Apr 13 18:27:01 2011
@@ -20,6 +20,7 @@ package org.apache.hadoop.hdfs.server.na
import static org.junit.Assert.*;
+import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.permission.FsPermission;
import org.apache.hadoop.fs.permission.PermissionStatus;
@@ -120,4 +121,33 @@ public class TestINodeFile {
0L, 0L, preferredBlockSize);
}
+ @Test
+ public void testGetFullPathName() {
+ PermissionStatus perms = new PermissionStatus(
+ userName, null, FsPermission.getDefault());
+
+ replication = 3;
+ preferredBlockSize = 128*1024*1024;
+ INodeFile inf = new INodeFile(perms, null, replication,
+ 0L, 0L, preferredBlockSize);
+ inf.setLocalName("f");
+
+ INodeDirectory root = new INodeDirectory(INodeDirectory.ROOT_NAME, perms);
+ INodeDirectory dir = new INodeDirectory("d", perms);
+
+ assertEquals("f", inf.getFullPathName());
+ assertEquals("", inf.getLocalParentDir());
+
+ dir.addChild(inf, false, false);
+ assertEquals("d"+Path.SEPARATOR+"f", inf.getFullPathName());
+ assertEquals("d", inf.getLocalParentDir());
+
+ root.addChild(dir, false, false);
+ assertEquals(Path.SEPARATOR+"d"+Path.SEPARATOR+"f", inf.getFullPathName());
+ assertEquals(Path.SEPARATOR+"d", dir.getFullPathName());
+
+ assertEquals(Path.SEPARATOR, root.getFullPathName());
+ assertEquals(Path.SEPARATOR, root.getLocalParentDir());
+
+ }
}