diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index da3d8a076e4..80ab1de6712 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -666,6 +666,9 @@ Release 2.8.0 - UNRELEASED HDFS-8706. Fix typo in datanode startup options in HDFSCommands.html. (Brahma Reddy Battula via Arpit Agarwal) + HDFS-8577. Avoid retrying to recover lease on a file which does not exist + (J.Andreina via vinayakumarb) + Release 2.7.2 - UNRELEASED INCOMPATIBLE CHANGES diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/DebugAdmin.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/DebugAdmin.java index 41f1ca48017..d179a5cf831 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/DebugAdmin.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/DebugAdmin.java @@ -19,6 +19,7 @@ package org.apache.hadoop.hdfs.tools; import java.io.DataInputStream; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; @@ -254,6 +255,11 @@ public class DebugAdmin extends Configured implements Tool { IOException ioe = null; try { recovered = dfs.recoverLease(new Path(pathStr)); + } catch (FileNotFoundException e) { + System.err.println("recoverLease got exception: " + e.getMessage()); + System.err.println("Giving up on recoverLease for " + pathStr + + " after 1 try"); + return 1; } catch (IOException e) { ioe = e; } @@ -262,8 +268,8 @@ public class DebugAdmin extends Configured implements Tool { return 0; } if (ioe != null) { - System.err.println("recoverLease got exception: "); - ioe.printStackTrace(); + System.err.println("recoverLease got exception: " + + ioe.getMessage()); } else { System.err.println("recoverLease returned false."); } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/tools/TestDebugAdmin.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/tools/TestDebugAdmin.java index 52b194d22d0..07f70e02a61 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/tools/TestDebugAdmin.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/tools/TestDebugAdmin.java @@ -37,6 +37,7 @@ import java.io.PrintStream; import static org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetTestUtil.*; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; public class TestDebugAdmin { private MiniDFSCluster cluster; @@ -116,4 +117,11 @@ public class TestDebugAdmin { "-block", blockFile.getAbsolutePath()}) ); } + + @Test(timeout = 60000) + public void testRecoverLeaseforFileNotFound() throws Exception { + assertTrue(runCmd(new String[] { + "recoverLease", "-path", "/foo", "-retries", "2" }).contains( + "Giving up on recoverLease for /foo after 1 try")); + } }