diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/client/api/impl/TimelineClientImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/client/api/impl/TimelineClientImpl.java index 019c7a5..49ab129 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/client/api/impl/TimelineClientImpl.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/client/api/impl/TimelineClientImpl.java @@ -329,8 +329,8 @@ public ClientResponse run() throws Exception { }); } catch (UndeclaredThrowableException e) { throw new IOException(e.getCause()); - } catch (InterruptedException ie) { - throw new IOException(ie); + } catch (InterruptedException | AbstractMethodError e) { + throw new IOException(e); } if (resp == null || resp.getClientResponseStatus() != ClientResponse.Status.OK) { diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestTimelineClient.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestTimelineClient.java index 4c74c61..d105993 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestTimelineClient.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestTimelineClient.java @@ -25,6 +25,7 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; +import java.io.IOException; import java.net.ConnectException; import org.apache.hadoop.fs.CommonConfigurationKeysPublic; @@ -129,6 +130,17 @@ public void testPostEntitiesConnectionRefused() throws Exception { } @Test + public void testPostEntitiesAbstractMethodError() throws Exception { + mockClientResponseWithAbstractMethodError(client); + try { + client.putEntities(generateEntity()); + Assert.fail("AbstractmethodException is expected"); + } catch (IOException ie) { + Assert.assertTrue(ie.getCause() instanceof AbstractMethodError); + } + } + + @Test public void testPutDomain() throws Exception { mockDomainClientResponse(client, ClientResponse.Status.OK, false); try { @@ -290,6 +302,14 @@ private void assertException(TimelineClientImpl client, RuntimeException ce) { client.connectionRetry.getRetired()); } + private static ClientResponse mockClientResponseWithAbstractMethodError( + TimelineClientImpl client) { + ClientResponse response = mock(ClientResponse.class); + doThrow(new AbstractMethodError("Test incompatible classes")).when(client) + .doPostingObject(any(TimelineEntities.class), any(String.class)); + return response; + } + private static ClientResponse mockEntityClientResponse( TimelineClientImpl client, ClientResponse.Status status, boolean hasError, boolean hasRuntimeError) {