Repository: ambari Updated Branches: refs/heads/trunk af0e297ee -> b4307db96
AMBARI-5047. API proxy returns "204 No Content" if the underlying call takes more than a few seconds.(vbrodetskyi) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/b4307db9 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/b4307db9 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/b4307db9 Branch: refs/heads/trunk Commit: b4307db96da2035c0c74e97819a3e7f9360e1ff5 Parents: af0e297 Author: Vitaly Brodetskyi <[email protected]> Authored: Wed Mar 12 16:26:01 2014 +0200 Committer: Vitaly Brodetskyi <[email protected]> Committed: Wed Mar 12 16:26:42 2014 +0200 ---------------------------------------------------------------------- .../org/apache/ambari/server/proxy/ProxyService.java | 12 +++++++----- .../apache/ambari/server/proxy/ProxyServiceTest.java | 14 +++++++------- 2 files changed, 14 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/b4307db9/ambari-server/src/main/java/org/apache/ambari/server/proxy/ProxyService.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/proxy/ProxyService.java b/ambari-server/src/main/java/org/apache/ambari/server/proxy/ProxyService.java index 98a7e44..cb07a0b 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/proxy/ProxyService.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/proxy/ProxyService.java @@ -48,9 +48,9 @@ import java.util.HashMap; @Path("/") public class ProxyService { - private static final int REPO_URL_CONNECT_TIMEOUT = 3000; - private static final int REPO_URL_READ_TIMEOUT = 3000; - private static final int HTTP_ERROR_RANGE_START = 400; + private static final int URL_CONNECT_TIMEOUT = 20000; + private static final int URL_READ_TIMEOUT = 15000; + private static final int HTTP_ERROR_RANGE_START = Response.Status.BAD_REQUEST.getStatusCode(); private static final String REQUEST_TYPE_GET = "GET"; private static final String REQUEST_TYPE_POST = "POST"; @@ -85,8 +85,8 @@ public class ProxyService { } private Response handleRequest(String requestType, UriInfo ui, InputStream body, HttpHeaders headers) { - URLStreamProvider urlStreamProvider = new URLStreamProvider(REPO_URL_CONNECT_TIMEOUT, - REPO_URL_READ_TIMEOUT, null, null, null); + URLStreamProvider urlStreamProvider = new URLStreamProvider(URL_CONNECT_TIMEOUT, + URL_READ_TIMEOUT, null, null, null); String query = ui.getRequestUri().getQuery(); if (query != null && query.indexOf(QUERY_PARAMETER_URL) != -1) { String url = query.replaceFirst(QUERY_PARAMETER_URL, ""); @@ -106,6 +106,8 @@ public class ProxyService { return rb.type(contentType).build(); } catch (IOException e) { LOG.error(ERROR_PROCESSING_URL + url, e); + return Response.status(Response.Status.BAD_REQUEST.getStatusCode()).type(MediaType.TEXT_PLAIN). + entity(e.getMessage()).build(); } } return null; http://git-wip-us.apache.org/repos/asf/ambari/blob/b4307db9/ambari-server/src/test/java/org/apache/ambari/server/proxy/ProxyServiceTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/proxy/ProxyServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/proxy/ProxyServiceTest.java index 7cbefef..9b824fd 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/proxy/ProxyServiceTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/proxy/ProxyServiceTest.java @@ -84,7 +84,7 @@ class ProxyServiceTest extends BaseServiceTest { expect(urlConnectionMock.getResponseCode()).andReturn(200); expect(urlConnectionMock.getContentType()).andReturn("text/plain"); expect(urlConnectionMock.getInputStream()).andReturn(is); - PowerMock.expectNew(URLStreamProvider.class, 3000, 3000, null, null, null).andReturn(streamProviderMock); + PowerMock.expectNew(URLStreamProvider.class, 20000, 15000, null, null, null).andReturn(streamProviderMock); expect(Response.status(200)).andReturn(responseBuilderMock); expect(responseBuilderMock.entity(is)).andReturn(responseBuilderMock); expect(responseBuilderMock.type("text/plain")).andReturn(responseBuilderMock); @@ -121,7 +121,7 @@ class ProxyServiceTest extends BaseServiceTest { expect(urlConnectionMock.getResponseCode()).andReturn(200); expect(urlConnectionMock.getContentType()).andReturn("text/plain"); expect(urlConnectionMock.getInputStream()).andReturn(is); - PowerMock.expectNew(URLStreamProvider.class, 3000, 3000, null, null, null).andReturn(streamProviderMock); + PowerMock.expectNew(URLStreamProvider.class, 20000, 15000, null, null, null).andReturn(streamProviderMock); expect(Response.status(200)).andReturn(responseBuilderMock); expect(responseBuilderMock.entity(is)).andReturn(responseBuilderMock); expect(responseBuilderMock.type("text/plain")).andReturn(responseBuilderMock); @@ -158,7 +158,7 @@ class ProxyServiceTest extends BaseServiceTest { expect(urlConnectionMock.getResponseCode()).andReturn(200); expect(urlConnectionMock.getContentType()).andReturn("text/plain"); expect(urlConnectionMock.getInputStream()).andReturn(is); - PowerMock.expectNew(URLStreamProvider.class, 3000, 3000, null, null, null).andReturn(streamProviderMock); + PowerMock.expectNew(URLStreamProvider.class, 20000, 15000, null, null, null).andReturn(streamProviderMock); expect(Response.status(200)).andReturn(responseBuilderMock); expect(responseBuilderMock.entity(is)).andReturn(responseBuilderMock); expect(responseBuilderMock.type("text/plain")).andReturn(responseBuilderMock); @@ -194,7 +194,7 @@ class ProxyServiceTest extends BaseServiceTest { expect(urlConnectionMock.getResponseCode()).andReturn(200); expect(urlConnectionMock.getContentType()).andReturn("text/plain"); expect(urlConnectionMock.getInputStream()).andReturn(is); - PowerMock.expectNew(URLStreamProvider.class, 3000, 3000, null, null, null).andReturn(streamProviderMock); + PowerMock.expectNew(URLStreamProvider.class, 20000, 15000, null, null, null).andReturn(streamProviderMock); expect(Response.status(200)).andReturn(responseBuilderMock); expect(responseBuilderMock.entity(is)).andReturn(responseBuilderMock); expect(responseBuilderMock.type("text/plain")).andReturn(responseBuilderMock); @@ -224,7 +224,7 @@ class ProxyServiceTest extends BaseServiceTest { expect(uriMock.getQuery()).andReturn("url=testurl"); expect(streamProviderMock.processURL("testurl", "GET", null, headerParamsToForward)).andReturn(urlConnectionMock); expect(urlConnectionMock.getResponseCode()).andReturn(405).times(2); - PowerMock.expectNew(URLStreamProvider.class, 3000, 3000, null, null, null).andReturn(streamProviderMock); + PowerMock.expectNew(URLStreamProvider.class, 20000, 15000, null, null, null).andReturn(streamProviderMock); PowerMock.replay(streamProviderMock, URLStreamProvider.class, uriMock, URI.class); replay(getUriInfo(), urlConnectionMock, getHttpHeaders()); ps.processGetRequestForwarding(getHttpHeaders(),getUriInfo()); @@ -255,7 +255,7 @@ class ProxyServiceTest extends BaseServiceTest { expect(urlConnectionMock.getResponseCode()).andReturn(200); expect(urlConnectionMock.getContentType()).andReturn("application/json"); expect(urlConnectionMock.getInputStream()).andReturn(new ByteArrayInputStream("{ \"test\":\"test\" }".getBytes())); - PowerMock.expectNew(URLStreamProvider.class, 3000, 3000, null, null, null).andReturn(streamProviderMock); + PowerMock.expectNew(URLStreamProvider.class, 20000, 15000, null, null, null).andReturn(streamProviderMock); expect(Response.status(200)).andReturn(responseBuilderMock); expect(responseBuilderMock.entity(map)).andReturn(responseBuilderMock); expect(responseBuilderMock.type("application/json")).andReturn(responseBuilderMock); @@ -287,7 +287,7 @@ class ProxyServiceTest extends BaseServiceTest { expect(urlConnectionMock.getResponseCode()).andReturn(200); expect(urlConnectionMock.getContentType()).andReturn("text/plain"); expect(urlConnectionMock.getInputStream()).andReturn(is); - PowerMock.expectNew(URLStreamProvider.class, 3000, 3000, null, null, null).andReturn(streamProviderMock); + PowerMock.expectNew(URLStreamProvider.class, 20000, 15000, null, null, null).andReturn(streamProviderMock); expect(streamProviderMock.processURL("http://server:8188/ws/v1/timeline/HIVE_QUERY_ID?fields=events,primary" + "filters&limit=10&primaryFilter=user:hiveuser1", "GET", null, headerParamsToForward)).andReturn(urlConnectionMock); PowerMock.replay(streamProviderMock, URLStreamProvider.class);
