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

Colin Patrick McCabe commented on HDFS-5546:
--------------------------------------------

{code}
@@ -86,7 +87,11 @@ protected void processOptions(LinkedList<String> args)
   protected void processPathArgument(PathData item) throws IOException {
     // implicitly recurse once for cmdline directories
     if (dirRecurse && item.stat.isDirectory()) {
-      recursePath(item);
+      try {
+        recursePath(item);
+      } catch (FileNotFoundException e){
+        displayError(e);
+      } 
     } else {
       super.processPathArgument(item);
     }
{code}

This will result in the first moved/removed file aborting the entire recursive 
ls with an error message.  Basically, the same behavior as now, only with a 
process exit code of 0 rather than nonzero.  That's not what we want.

> race condition crashes "hadoop ls -R" when directories are moved/removed
> ------------------------------------------------------------------------
>
>                 Key: HDFS-5546
>                 URL: https://issues.apache.org/jira/browse/HDFS-5546
>             Project: Hadoop HDFS
>          Issue Type: Bug
>    Affects Versions: 2.2.0
>            Reporter: Colin Patrick McCabe
>            Priority: Minor
>         Attachments: HDFS-5546.1.patch
>
>
> This seems to be a rare race condition where we have a sequence of events 
> like this:
> 1. org.apache.hadoop.shell.Ls calls DFS#getFileStatus on directory D.
> 2. someone deletes or moves directory D
> 3. org.apache.hadoop.shell.Ls calls PathData#getDirectoryContents(D), which 
> calls DFS#listStatus(D). This throws FileNotFoundException.
> 4. ls command terminates with FNF



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to