Hi, I've been hitting an issue with the servicemix-http component. Certain machines that we run a servicemix-http consumer endpoint on, seem to always have a problem with connection timeouts when a response is returned from the target SE. The server is only being hit by a single user. First off, here is the exception:
*java.lang.Exception: HTTP request has timed out for exchange: ID:10.25.276.145-1267c593b09-8:22* * at org.apache.servicemix.http.endpoints.HttpConsumerEndpoint.process(HttpConsumerEndpoint.java:242) * * at org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:627) * * at org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:598) * * at org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:535) * * at org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60) * * at org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:623) * * at org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172) * * at org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168) * * at org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)* * at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) * * at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) * * at java.lang.Thread.run(Thread.java:619)* This exception is sometimes proceeded by a "Current Thread is not owner" exception in the servicemix-http. There is no exception in our application that is causing this. Sometimes when you refresh, the request and response will happen correctly, but then the next time you refresh is will start giving timeouts again. This problem seem to occur with all of the 2009 versions. When I looked in the source code, it looks like the timeout happens when Servicemix attempts to resume the continuation in Jetty, but for some reason the resume() method returns false most of the time (I think false is the value when it can't resume it). I can't seem to understand why this happens. Does it sound like a bug? I saw a post to the Jetty guys that Guillaume wrote saying that there were problems if a request-response happened too fast when a continuation was resumed before jetty had a chance to suspend it (if I remember correctly). He wrote that a long time ago, but it almost sounds like that could be the cause here. When it happens, the request/response is instant. When it doesn't happen, the request-response cycle does seem slightly slower. This problem does seem to occur more often on certain machines than it does from other machines from my observation. Anyone have any suggestions? Thanks! Ryan
