Repository: hadoop Updated Branches: refs/heads/branch-2.7 ca2993340 -> e160ddfb8
HDFS-9634. webhdfs client side exceptions don't provide enough details. Contributed by Eric Payne. (cherry picked from commit 7b70500484574a565dd8cd5c7d8b5bc7c6d91154) Conflicts: hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/e160ddfb Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/e160ddfb Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/e160ddfb Branch: refs/heads/branch-2.7 Commit: e160ddfb8d7ef3acbe22cde850b48671719f8338 Parents: ca29933 Author: Kihwal Lee <kih...@apache.org> Authored: Wed Jan 20 15:33:59 2016 -0600 Committer: Kihwal Lee <kih...@apache.org> Committed: Thu Jan 21 09:34:29 2016 -0600 ---------------------------------------------------------------------- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 +++ .../apache/hadoop/hdfs/web/WebHdfsFileSystem.java | 17 ++++++++++++++++- .../hadoop/hdfs/web/TestWebHdfsTimeouts.java | 14 +++++++------- 3 files changed, 26 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/e160ddfb/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 67e13a5..69bb220 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -22,6 +22,9 @@ Release 2.7.3 - UNRELEASED HDFS-9415. Document dfs.cluster.administrators and dfs.permissions.superusergroup. (Xiaobing Zhou via Arpit Agarwal) + HDFS-9634. webhdfs client side exceptions don't provide enough details + (Eric Payne via kihwal) + OPTIMIZATIONS BUG FIXES http://git-wip-us.apache.org/repos/asf/hadoop/blob/e160ddfb/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/web/WebHdfsFileSystem.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/web/WebHdfsFileSystem.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/web/WebHdfsFileSystem.java index a7bf6a9..b738050 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/web/WebHdfsFileSystem.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/web/WebHdfsFileSystem.java @@ -24,6 +24,7 @@ import java.io.EOFException; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.lang.reflect.InvocationTargetException; import java.net.HttpURLConnection; import java.net.InetSocketAddress; import java.net.MalformedURLException; @@ -474,6 +475,7 @@ public class WebHdfsFileSystem extends FileSystem protected ExcludeDatanodesParam excludeDatanodes = new ExcludeDatanodesParam(""); private boolean checkRetry; + private String redirectHost; protected AbstractRunner(final HttpOpParam.Op op, boolean redirected) { this.op = op; @@ -524,7 +526,7 @@ public class WebHdfsFileSystem extends FileSystem */ protected HttpURLConnection connect(URL url) throws IOException { //redirect hostname and port - String redirectHost = null; + redirectHost = null; // resolve redirects for a DN operation unless already resolved @@ -630,6 +632,19 @@ public class WebHdfsFileSystem extends FileSystem throw it; } } catch (IOException ioe) { + // Attempt to include the redirected node in the exception. If the + // attempt to recreate the exception fails, just use the original. + String node = redirectHost; + if (node == null) { + node = url.getAuthority(); + } + try { + ioe = ioe.getClass().getConstructor(String.class) + .newInstance(node + ": " + ioe.getMessage()); + } catch (NoSuchMethodException | SecurityException + | InstantiationException | IllegalAccessException + | IllegalArgumentException | InvocationTargetException e) { + } shouldRetry(ioe, retry); } } http://git-wip-us.apache.org/repos/asf/hadoop/blob/e160ddfb/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/web/TestWebHdfsTimeouts.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/web/TestWebHdfsTimeouts.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/web/TestWebHdfsTimeouts.java index 13a5a53..5419093 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/web/TestWebHdfsTimeouts.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/web/TestWebHdfsTimeouts.java @@ -115,7 +115,7 @@ public class TestWebHdfsTimeouts { fs.listFiles(new Path("/"), false); fail("expected timeout"); } catch (SocketTimeoutException e) { - assertEquals("connect timed out", e.getMessage()); + assertEquals(fs.getUri().getAuthority() + ": connect timed out", e.getMessage()); } } @@ -128,7 +128,7 @@ public class TestWebHdfsTimeouts { fs.listFiles(new Path("/"), false); fail("expected timeout"); } catch (SocketTimeoutException e) { - assertEquals("Read timed out", e.getMessage()); + assertEquals(fs.getUri().getAuthority() + ": Read timed out", e.getMessage()); } } @@ -143,7 +143,7 @@ public class TestWebHdfsTimeouts { fs.getDelegationToken("renewer"); fail("expected timeout"); } catch (SocketTimeoutException e) { - assertEquals("connect timed out", e.getMessage()); + assertEquals(fs.getUri().getAuthority() + ": connect timed out", e.getMessage()); } } @@ -157,7 +157,7 @@ public class TestWebHdfsTimeouts { fs.getDelegationToken("renewer"); fail("expected timeout"); } catch (SocketTimeoutException e) { - assertEquals("Read timed out", e.getMessage()); + assertEquals(fs.getUri().getAuthority() + ": Read timed out", e.getMessage()); } } @@ -172,7 +172,7 @@ public class TestWebHdfsTimeouts { fs.getFileChecksum(new Path("/file")); fail("expected timeout"); } catch (SocketTimeoutException e) { - assertEquals("connect timed out", e.getMessage()); + assertEquals(fs.getUri().getAuthority() + ": connect timed out", e.getMessage()); } } @@ -187,7 +187,7 @@ public class TestWebHdfsTimeouts { fs.getFileChecksum(new Path("/file")); fail("expected timeout"); } catch (SocketTimeoutException e) { - assertEquals("Read timed out", e.getMessage()); + assertEquals(fs.getUri().getAuthority() + ": Read timed out", e.getMessage()); } } @@ -203,7 +203,7 @@ public class TestWebHdfsTimeouts { os = fs.create(new Path("/file")); fail("expected timeout"); } catch (SocketTimeoutException e) { - assertEquals("connect timed out", e.getMessage()); + assertEquals(fs.getUri().getAuthority() + ": connect timed out", e.getMessage()); } finally { IOUtils.cleanup(LOG, os); }