HDFS-9478. Reason for failing ipc.FairCallQueue contruction should be thrown. 
(Contributed by Ajith S)


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/7f14dc32
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/7f14dc32
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/7f14dc32

Branch: refs/heads/branch-2.7
Commit: 7f14dc3294dba7dd658fb2814fa3a599bd9dc0b0
Parents: efb210c
Author: Arpit Agarwal <[email protected]>
Authored: Tue Mar 29 13:07:31 2016 -0700
Committer: Arpit Agarwal <[email protected]>
Committed: Tue Mar 29 13:07:31 2016 -0700

----------------------------------------------------------------------
 .../org/apache/hadoop/ipc/CallQueueManager.java | 10 ++++++++
 .../apache/hadoop/ipc/TestCallQueueManager.java | 24 ++++++++++++++++++++
 2 files changed, 34 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/7f14dc32/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/CallQueueManager.java
----------------------------------------------------------------------
diff --git 
a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/CallQueueManager.java
 
b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/CallQueueManager.java
index 27949d0..0b1de93 100644
--- 
a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/CallQueueManager.java
+++ 
b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/CallQueueManager.java
@@ -19,6 +19,7 @@
 package org.apache.hadoop.ipc;
 
 import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
@@ -63,6 +64,9 @@ public class CallQueueManager<E> {
       return ctor.newInstance(maxLen, ns, conf);
     } catch (RuntimeException e) {
       throw e;
+    } catch (InvocationTargetException e) {
+      throw new RuntimeException(theClass.getName()
+          + " could not be constructed.", e.getCause());
     } catch (Exception e) {
     }
 
@@ -72,6 +76,9 @@ public class CallQueueManager<E> {
       return ctor.newInstance(maxLen);
     } catch (RuntimeException e) {
       throw e;
+    } catch (InvocationTargetException e) {
+      throw new RuntimeException(theClass.getName()
+          + " could not be constructed.", e.getCause());
     } catch (Exception e) {
     }
 
@@ -81,6 +88,9 @@ public class CallQueueManager<E> {
       return ctor.newInstance();
     } catch (RuntimeException e) {
       throw e;
+    } catch (InvocationTargetException e) {
+      throw new RuntimeException(theClass.getName()
+          + " could not be constructed.", e.getCause());
     } catch (Exception e) {
     }
 

http://git-wip-us.apache.org/repos/asf/hadoop/blob/7f14dc32/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestCallQueueManager.java
----------------------------------------------------------------------
diff --git 
a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestCallQueueManager.java
 
b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestCallQueueManager.java
index 1b618b1..40c1305 100644
--- 
a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestCallQueueManager.java
+++ 
b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestCallQueueManager.java
@@ -19,6 +19,8 @@
 package org.apache.hadoop.ipc;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -219,4 +221,26 @@ public class TestCallQueueManager {
 
     assertEquals(totalCallsConsumed, totalCallsCreated);
   }
+
+  public static class ExceptionFakeCall {
+
+    public ExceptionFakeCall() {
+      throw new IllegalArgumentException("Exception caused by constructor.!!");
+    }
+  }
+
+  private static final Class<? extends BlockingQueue<ExceptionFakeCall>> 
exceptionQueueClass = CallQueueManager
+      .convertQueueClass(ExceptionFakeCall.class, ExceptionFakeCall.class);
+
+  @Test
+  public void testInvocationException() throws InterruptedException {
+    try {
+      new CallQueueManager<ExceptionFakeCall>(exceptionQueueClass, 10, "", 
null);
+      fail();
+    } catch (RuntimeException re) {
+      assertTrue(re.getCause() instanceof IllegalArgumentException);
+      assertEquals("Exception caused by constructor.!!", re.getCause()
+          .getMessage());
+    }
+  }
 }
\ No newline at end of file

Reply via email to