Dhruba, your version fixes the problem and passes the unit tests,
However I also wonder why my version does not pass the tests. Maybe
there are some assumptions that are wrong. I think we may benefit by
examining the cause.
My patch fails in
org.apache.hadoop.dfs.TestCheckpoint
org.apache.hadoop.dfs.TestDFSFinalize
org.apache.hadoop.dfs.TestDFSShell
org.apache.hadoop.dfs.TestFsck
org.apache.hadoop.dfs.TestRestartDFS
org.apache.hadoop.fs.TestCopyFiles
org.apache.hadoop.mapred.TestMiniMRClasspath
org.apache.hadoop.mapred.TestMiniMRDFSCaching
org.apache.hadoop.mapred.TestMiniMRWithDFS
quite an success for a line liner *smile*.
Anyhow i will not be around for a while so i cannot pursue this further.
Other than that +1 for Dhruba's patch to be applied both 0.14 and 0.15.
Raghu Angadi (JIRA) wrote:
[ https://issues.apache.org/jira/browse/HADOOP-1647?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12515905 ]
Raghu Angadi commented on HADOOP-1647:
--------------------------------------
I am curious how Enis' patch above is functionally different? Is there any case
where rootDir has non null parent?
DistributedFileSystem.getFileStatus() fails for path "/"
--------------------------------------------------------
Key: HADOOP-1647
URL: https://issues.apache.org/jira/browse/HADOOP-1647
Project: Hadoop
Issue Type: Bug
Components: dfs
Affects Versions: 0.14.0, 0.15.0
Reporter: Enis Soztutar
Assignee: dhruba borthakur
Priority: Blocker
Fix For: 0.14.0, 0.15.0
Attachments: fileStatus.patch, getFileStatusJavadoc.patch
DistributedFileSystem#getFileStatus throws the following exception when invoked with new
Path("/"). LocalFileSystem does not. The code to produce this error is
{code}
public static void main(String[] args) throws Exception{
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
Path path = new Path("/");
System.out.println("Path : \"" + path.toString() + "\"");
System.out.println(fs.isDirectory(path));
System.out.println(fs.getFileStatus(path).isDir());
}
{code}
for Local configuration the code prints :
{code}
Path : "/"
true
true
{code}
For a new formatted dfs with only one file /user/enis/file.txt, Path could not be created.
{code}
Path : "/"
false
Exception in thread "main" org.apache.hadoop.ipc.RemoteException:
java.io.IOException: java.lang.IllegalArgumentException: Can not create a Path from an
empty string
at org.apache.hadoop.fs.Path.checkPathArg(Path.java:82)
at org.apache.hadoop.fs.Path.<init>(Path.java:90)
at org.apache.hadoop.dfs.DFSFileInfo.<init>(DFSFileInfo.java:59)
at org.apache.hadoop.dfs.FSDirectory.getFileInfo(FSDirectory.java:729)
at
org.apache.hadoop.dfs.FSNamesystem.getFileInfo(FSNamesystem.java:1301)
at org.apache.hadoop.dfs.NameNode.getFileInfo(NameNode.java:488)
at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:340)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:566)
at org.apache.hadoop.ipc.Client.call(Client.java:470)
at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:165)
at org.apache.hadoop.dfs.$Proxy0.getFileInfo(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:82)
at
org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:59)
at org.apache.hadoop.dfs.$Proxy0.getFileInfo(Unknown Source)
at org.apache.hadoop.dfs.DFSClient.getFileInfo(DFSClient.java:430)
at
org.apache.hadoop.dfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:319)
at org.apache.hadoop.util.TestIsDir.main(TestIsDir.java:38)
{code}