From 2eae130ab9edd318c82503c2306f610f2b5a3e51 Mon Sep 17 00:00:00 2001 From: Vinayakumar B Date: Fri, 3 Jul 2015 13:35:48 +0530 Subject: [PATCH] HDFS-8577. Avoid retrying to recover lease on a file which does not exist (Contributed by J.Andreina) --- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 +++ .../java/org/apache/hadoop/hdfs/tools/DebugAdmin.java | 10 ++++++++-- .../org/apache/hadoop/hdfs/tools/TestDebugAdmin.java | 8 ++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 6678a3e410..4f184fb830 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -1002,6 +1002,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 41f1ca4801..d179a5cf83 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 @@ 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 @@ int run(List args) throws IOException { 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 @@ int run(List args) throws IOException { 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 52b194d22d..07f70e02a6 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 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 void testVerifyBlockChecksumCommand() throws Exception { "-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")); + } }