[
https://issues.apache.org/jira/browse/CAMEL-14138?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17260370#comment-17260370
]
Claus Ibsen commented on CAMEL-14138:
-------------------------------------
Also a thought is that in jetty http client listener callback, then we should
decouple its thread from continue routing in Camel.
That means either where Camel's AsyncCallback is invoked such as
1)
https://github.com/apache/camel/blob/8a317028c4cb34791fa0e122e70a30aa9d86fdaa/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/JsonRestProcessor.java#L226
and the other places where it's invoked.
should be done by separate thread (thread pool).
2)
Or we do it earlier in the jetty http listener, where we then use another
thread (thread pool). Which is also a bit what Jeremy said.
3)
An alternative (although its not yet used by camel components) is to put the
work on reactive executor via
org.apache.camel.impl.engine.DefaultReactiveExecutor#schedule
Then its some other thread that eventually will process this. But the reactive
executor is first implemented internally in the EIPs, and not (yet) for Camel
components.
> Salesforce: a synchronous call that follow an asynchronous call will always
> result in a TimeoutException
> --------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-14138
> URL: https://issues.apache.org/jira/browse/CAMEL-14138
> Project: Camel
> Issue Type: Bug
> Components: camel-salesforce
> Affects Versions: 3.0.0.RC3
> Reporter: Jeremy Ross
> Priority: Major
> Fix For: 3.x
>
> Attachments: Call stack.png, thread-dump.txt
>
>
> Using the {{synchronous}} URL option, a synchronous operation following an
> asynchronous operation will result in a
> {{java.util.concurrent.TimeoutException}}. Subsequent synchronous operations
> will succeed. Despite the {{TimeoutException}}, the operation can still be
> successful on the salesforce side. I've yet to determine why Camel thinks the
> operation is timing out.
> Test case: [https://github.com/jeremyross/CAMEL-14138]
> stack trace:
> {noformat}
> org.apache.camel.component.salesforce.api.SalesforceException: Unexpected
> error {0:null} executing
> {POST:https://cs44.salesforce.com/services/data/v45.0/sobjects/Contact}
> at
> org.apache.camel.component.salesforce.internal.client.AbstractClientBase$1.onComplete(AbstractClientBase.java:206)
> ~[camel-salesforce-3.0.0-SNAPSHOT.jar:3.0.0-SNAPSHOT]
> at
> org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:196)
> ~[jetty-client-9.4.19.v20190610.jar:9.4.19.v20190610]
> at
> org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:188)
> ~[jetty-client-9.4.19.v20190610.jar:9.4.19.v20190610]
> at
> org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:441)
> ~[jetty-client-9.4.19.v20190610.jar:9.4.19.v20190610]
> at org.eclipse.jetty.client.HttpReceiver.abort(HttpReceiver.java:523)
> ~[jetty-client-9.4.19.v20190610.jar:9.4.19.v20190610]
> at
> org.eclipse.jetty.client.HttpChannel.abortResponse(HttpChannel.java:156)
> ~[jetty-client-9.4.19.v20190610.jar:9.4.19.v20190610]
> at org.eclipse.jetty.client.HttpChannel.abort(HttpChannel.java:149)
> ~[jetty-client-9.4.19.v20190610.jar:9.4.19.v20190610]
> at org.eclipse.jetty.client.HttpExchange.abort(HttpExchange.java:257)
> ~[jetty-client-9.4.19.v20190610.jar:9.4.19.v20190610]
> at
> org.eclipse.jetty.client.HttpConversation.abort(HttpConversation.java:149)
> ~[jetty-client-9.4.19.v20190610.jar:9.4.19.v20190610]
> at org.eclipse.jetty.client.HttpRequest.abort(HttpRequest.java:766)
> ~[jetty-client-9.4.19.v20190610.jar:9.4.19.v20190610]
> at
> org.eclipse.jetty.client.http.HttpConnectionOverHTTP.abort(HttpConnectionOverHTTP.java:204)
> ~[jetty-client-9.4.19.v20190610.jar:9.4.19.v20190610]
> at
> org.eclipse.jetty.client.http.HttpConnectionOverHTTP.close(HttpConnectionOverHTTP.java:190)
> ~[jetty-client-9.4.19.v20190610.jar:9.4.19.v20190610]
> at
> org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onIdleExpired(HttpConnectionOverHTTP.java:145)
> ~[jetty-client-9.4.19.v20190610.jar:9.4.19.v20190610]
> at
> org.eclipse.jetty.io.ssl.SslConnection.onIdleExpired(SslConnection.java:302)
> ~[jetty-io-9.4.19.v20190610.jar:9.4.19.v20190610]
> at
> org.eclipse.jetty.io.AbstractEndPoint.onIdleExpired(AbstractEndPoint.java:401)
> ~[jetty-io-9.4.19.v20190610.jar:9.4.19.v20190610]
> at
> org.eclipse.jetty.io.IdleTimeout.checkIdleTimeout(IdleTimeout.java:171)
> ~[jetty-io-9.4.19.v20190610.jar:9.4.19.v20190610]
> at org.eclipse.jetty.io.IdleTimeout.idleCheck(IdleTimeout.java:113)
> ~[jetty-io-9.4.19.v20190610.jar:9.4.19.v20190610]
> at
> java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
> ~[na:na]
> at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
> ~[na:na]
> at
> java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
> ~[na:na]
> at
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
> ~[na:na]
> at
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
> ~[na:na]
> at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
> Caused by: java.util.concurrent.TimeoutException: Idle timeout 10000 ms
> {noformat}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)