[ 
https://issues.apache.org/jira/browse/HBASE-4754?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13145318#comment-13145318
 ] 

Ted Yu commented on HBASE-4754:
-------------------------------

I checked calls to fs.listStatus() in the codebase.
FSUtils.java contains the most calls. All the calls in FSUtils.java don't 
expect the return value to be null. This means letting FileNotFoundException 
bubble up wouldn't change the semantics of the calling methods.
In some other files, such as HLogSplitter.java, fs.listStatus() is preceded 
with fs.exists() check.
                
> FSTableDescriptors.getTableInfoPath() should be able to handle 
> FileNotFoundException
> ------------------------------------------------------------------------------------
>
>                 Key: HBASE-4754
>                 URL: https://issues.apache.org/jira/browse/HBASE-4754
>             Project: HBase
>          Issue Type: Bug
>    Affects Versions: 0.92.0
>            Reporter: Ted Yu
>            Assignee: Ted Yu
>            Priority: Blocker
>             Fix For: 0.92.0
>
>         Attachments: 4754.txt
>
>
> As reported by Roman in the thread entitled 'HBase 0.92/Hadoop 0.22 test 
> results', table creation would result in the following if hadoop 0.22 is the 
> underlying platform:
> {code}
> 11/11/05 19:08:48 INFO handler.CreateTableHandler: Attemping to create
> the table b
> 11/11/05 19:08:48 ERROR handler.CreateTableHandler: Error trying to
> create the table b
> java.io.FileNotFoundException: File
> hdfs://ip-10-110-254-200.ec2.internal:17020/hbase/b does not exist.
>        at 
> org.apache.hadoop.hdfs.DistributedFileSystem.listStatus(DistributedFileSystem.java:387)
>        at org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:1085)
>        at org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:1110)
>        at 
> org.apache.hadoop.hbase.util.FSTableDescriptors.getTableInfoPath(FSTableDescriptors.java:257)
>        at 
> org.apache.hadoop.hbase.util.FSTableDescriptors.getTableInfoPath(FSTableDescriptors.java:243)
>        at 
> org.apache.hadoop.hbase.util.FSTableDescriptors.createTableDescriptor(FSTableDescriptors.java:566)
>        at 
> org.apache.hadoop.hbase.util.FSTableDescriptors.createTableDescriptor(FSTableDescriptors.java:535)
>        at 
> org.apache.hadoop.hbase.util.FSTableDescriptors.createTableDescriptor(FSTableDescriptors.java:519)
>        at 
> org.apache.hadoop.hbase.master.handler.CreateTableHandler.handleCreateTable(CreateTableHandler.java:140)
>        at 
> org.apache.hadoop.hbase.master.handler.CreateTableHandler.process(CreateTableHandler.java:126)
>        at 
> org.apache.hadoop.hbase.executor.EventHandler.run(EventHandler.java:168)
>        at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>        at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>        at java.lang.Thread.run(Thread.java:619)
> {code}
> This was due to how DistributedFileSystem.listStatus() in 0.22 handles 
> non-existent directory:
> {code}
>   @Override
>   public FileStatus[] listStatus(Path p) throws IOException {
>     String src = getPathName(p);
>     // fetch the first batch of entries in the directory
>     DirectoryListing thisListing = dfs.listPaths(
>         src, HdfsFileStatus.EMPTY_NAME);
>     if (thisListing == null) { // the directory does not exist
>       throw new FileNotFoundException("File " + p + " does not exist.");
>     }
> {code}
> So in FSTableDescriptors.getTableInfoPath(), we should catch 
> FileNotFoundException and treat it the same way as status being null.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to