You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@metamodel.apache.org by "Jay mann (JIRA)" <ji...@apache.org> on 2016/05/12 15:09:13 UTC

[jira] [Closed] (METAMODEL-606) Multiple Restlet GET calls without reading body results in hanging connections and ConnectionPool timeout

     [ https://issues.apache.org/jira/browse/METAMODEL-606?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jay mann closed METAMODEL-606.
------------------------------
    Resolution: Fixed

Sorry this is for camel

> Multiple Restlet GET calls without reading body results in hanging connections and ConnectionPool timeout
> ---------------------------------------------------------------------------------------------------------
>
>                 Key: METAMODEL-606
>                 URL: https://issues.apache.org/jira/browse/METAMODEL-606
>             Project: Apache MetaModel
>          Issue Type: Bug
>            Reporter: Jay mann
>
> On subsequest rest GET calls, the body is not closed before being replaced.
> Shouldn't the existing body be closed (if it is a stream) before replacing it with something else? After multiple call this results in the connectionPool to be indefinitely full and this exception:
> org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool
> at org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getEntryBlocking(ConnPoolByRoute.java:412)
> at org.apache.http.impl.conn.tsccm.ConnPoolByRoute$1.getPoolEntry(ConnPoolByRoute.java:298)
> at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1.getConnection(ThreadSafeClientConnManager.java:238)
> at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:423)
> at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:882)
> at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
> at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107)
> at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
> at org.restlet.ext.httpclient.internal.HttpMethodCall.sendRequest(HttpMethodCall.java:339)
> at org.restlet.engine.adapter.ClientAdapter.commit(ClientAdapter.java:105)
> at org.restlet.engine.adapter.HttpClientHelper.handle(HttpClientHelper.java:119)
> at org.restlet.Client.handle(Client.java:153)
> at org.restlet.Restlet.handle(Restlet.java:275)
> at org.apache.camel.component.restlet.RestletProducer.process(RestletProducer.java:79)
> at org.apache.camel.component.restlet.RestletProducer.process(RestletProducer.java:98)
> at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)
> at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
> at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:468)
> at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
> at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)
> at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
> at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
> at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:62)
> at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)
> at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
> at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:468)
> at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
> at org.apache.camel.processor.LoopProcessor.process(LoopProcessor.java:128)
> at org.apache.camel.processor.LoopProcessor.process(LoopProcessor.java:96)
> at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
> at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:468)
> at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
> at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
> at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:62)
> at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)
> at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
> at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:468)
> at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
> at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)
> at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
> at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
> at org.apache.camel.component.netty4.handlers.ServerChannelHandler.processAsynchronously(ServerChannelHandler.java:138)
> at org.apache.camel.component.netty4.handlers.ServerChannelHandler.channelRead0(ServerChannelHandler.java:109)
> at org.apache.camel.component.netty4.http.handlers.HttpServerChannelHandler.channelRead0(HttpServerChannelHandler.java:211)
> at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
> at org.apache.camel.component.netty4.http.handlers.HttpServerMultiplexChannelHandler.channelRead0(HttpServerMultiplexChannelHandler.java:113)
> at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
> at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:307)
> at io.netty.channel.AbstractChannelHandlerContext.access$600(AbstractChannelHandlerContext.java:32)
> at io.netty.channel.AbstractChannelHandlerContext$7.run(AbstractChannelHandlerContext.java:298)
> at io.netty.util.concurrent.DefaultEventExecutor.run(DefaultEventExecutor.java:36)
> at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:112)
> at java.lang.Thread.run(Thread.java:745)
> Possibly related to this CAMEL-9611 because GET request no longer read the body, therefore the stream stays open and httpclient does not close the connection.
> streamCaching does fix the issue. 
> Here is some sample code to recreate the issue, just browse to http://localhost:port/contextRoot/ABC/test
> ..setup restConfiguration
> rest("/ABC")
> .description("ABC Rest Service")
> .consumes("application/json").produces("application/json")
> .get("test")
> .bindingMode(RestBindingMode.off)
> .to("direct:ABC-start-2")
> .get("hello")
> .bindingMode(RestBindingMode.off)
> .route().setBody(constant("HELLO"));
> from("direct:ABC-start-2").loop(10).to("direct:service-twice");
> from("direct:service-twice")
> .to("restlet:http://localhost:8299/contextRoot/ABC/hello?throwExceptionOnFailure=false&restletMethod=get&connectTimeout=10000&socketTimeout=10000")
> .to("restlet:http://localhost:8299/contextRoot/ABC/hello?throwExceptionOnFailure=false&restletMethod=get&connectTimeout=10000&socketTimeout=10000");



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)