From 5a3fed060264596ecdce294b33770faa4d4b51b0 Mon Sep 17 00:00:00 2001 From: Masatake Iwasaki Date: Sat, 23 Apr 2016 23:37:56 +0900 Subject: [PATCH] HDFS-9905. WebHdfsFileSystem#runWithRetry should display original stack trace on error. (Wei-Chiu Chuang via iwasakims) cherry-picked from 6fcde2e38da04cae3aad6b13cf442af211f71506 --- .../hadoop/hdfs/web/WebHdfsFileSystem.java | 6 +++-- .../hadoop/hdfs/web/TestWebHdfsTimeouts.java | 25 ++++++++++++------- 2 files changed, 20 insertions(+), 11 deletions(-) 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 a72fa276107..ccfed0b9f97 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 @@ -641,8 +641,10 @@ public class WebHdfsFileSystem extends FileSystem node = url.getAuthority(); } try { - ioe = ioe.getClass().getConstructor(String.class) - .newInstance(node + ": " + ioe.getMessage()); + IOException newIoe = ioe.getClass().getConstructor(String.class) + .newInstance(node + ": " + ioe.getMessage()); + newIoe.setStackTrace(ioe.getStackTrace()); + ioe = newIoe; } catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { 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 541909399a5..ee97d73156b 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 @@ -18,7 +18,6 @@ package org.apache.hadoop.hdfs.web; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import java.io.BufferedReader; @@ -43,6 +42,7 @@ import org.apache.hadoop.hdfs.DFSConfigKeys; import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.net.NetUtils; import org.apache.hadoop.security.authentication.client.ConnectionConfigurator; +import org.apache.hadoop.test.GenericTestUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -115,7 +115,8 @@ public class TestWebHdfsTimeouts { fs.listFiles(new Path("/"), false); fail("expected timeout"); } catch (SocketTimeoutException e) { - assertEquals(fs.getUri().getAuthority() + ": connect timed out", e.getMessage()); + GenericTestUtils.assertExceptionContains(fs.getUri().getAuthority() + + ": connect timed out",e); } } @@ -128,7 +129,8 @@ public class TestWebHdfsTimeouts { fs.listFiles(new Path("/"), false); fail("expected timeout"); } catch (SocketTimeoutException e) { - assertEquals(fs.getUri().getAuthority() + ": Read timed out", e.getMessage()); + GenericTestUtils.assertExceptionContains(fs.getUri().getAuthority() + + ": Read timed out", e); } } @@ -143,7 +145,8 @@ public class TestWebHdfsTimeouts { fs.getDelegationToken("renewer"); fail("expected timeout"); } catch (SocketTimeoutException e) { - assertEquals(fs.getUri().getAuthority() + ": connect timed out", e.getMessage()); + GenericTestUtils.assertExceptionContains(fs.getUri().getAuthority() + + ": connect timed out", e); } } @@ -157,7 +160,8 @@ public class TestWebHdfsTimeouts { fs.getDelegationToken("renewer"); fail("expected timeout"); } catch (SocketTimeoutException e) { - assertEquals(fs.getUri().getAuthority() + ": Read timed out", e.getMessage()); + GenericTestUtils.assertExceptionContains( + fs.getUri().getAuthority() + ": Read timed out", e); } } @@ -172,7 +176,8 @@ public class TestWebHdfsTimeouts { fs.getFileChecksum(new Path("/file")); fail("expected timeout"); } catch (SocketTimeoutException e) { - assertEquals(fs.getUri().getAuthority() + ": connect timed out", e.getMessage()); + GenericTestUtils.assertExceptionContains( + fs.getUri().getAuthority() + ": connect timed out", e); } } @@ -187,7 +192,8 @@ public class TestWebHdfsTimeouts { fs.getFileChecksum(new Path("/file")); fail("expected timeout"); } catch (SocketTimeoutException e) { - assertEquals(fs.getUri().getAuthority() + ": Read timed out", e.getMessage()); + GenericTestUtils.assertExceptionContains( + fs.getUri().getAuthority() + ": Read timed out", e); } } @@ -203,7 +209,8 @@ public class TestWebHdfsTimeouts { os = fs.create(new Path("/file")); fail("expected timeout"); } catch (SocketTimeoutException e) { - assertEquals(fs.getUri().getAuthority() + ": connect timed out", e.getMessage()); + GenericTestUtils.assertExceptionContains( + fs.getUri().getAuthority() + ": connect timed out", e); } finally { IOUtils.cleanup(LOG, os); } @@ -223,7 +230,7 @@ public class TestWebHdfsTimeouts { os = null; fail("expected timeout"); } catch (SocketTimeoutException e) { - assertEquals("Read timed out", e.getMessage()); + GenericTestUtils.assertExceptionContains("Read timed out", e); } finally { IOUtils.cleanup(LOG, os); }