[ 
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)

Reply via email to