[ 
https://issues.apache.org/jira/browse/CAMEL-16370?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17392232#comment-17392232
 ] 

Angelo Scaldaferri commented on CAMEL-16370:
--------------------------------------------

We have found a workaround, use one user for each subscription to Salesforce.


We have verified that the error is returned if the same username is used for 
multiple applications/subscriptions (e.g. the error occurred when application A 
uses user AA, application B uses user AA to connect to the other Salesforce 
Event).
We have not checked whether the application scales horizontally and the error 
is returned, but in our case this is not a requirement.

 

> Camel Salesforce component unable to reconnect after disconnect from 
> Salesforce
> -------------------------------------------------------------------------------
>
>                 Key: CAMEL-16370
>                 URL: https://issues.apache.org/jira/browse/CAMEL-16370
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-salesforce
>    Affects Versions: 3.8.0
>         Environment: Running in a spring-boot (v2.1.18.RELEASE) app in a 
> linux container deployed to openshift 3.11
>            Reporter: Jason
>            Priority: Major
>             Fix For: 3.x
>
>
> We are consuming Salesforce platform-events following the documented 
> recommendations and our connection will not reconnect after being 
> disconnected, apparently, from Salesforce.  I am not quite certain as to the 
> circumstances that Salesforce sends some sort of disconnect signal, but that 
> is what's logged from the SubscriptionHelper class. Our initial connection to 
> Salesforce is successful and we are able to receive platform-events up until 
> the point of the spontaneous disconnection.  Re-connection fails consistently 
> and always in the same way.  Logging is slightly different across version, 
> but the behavior seems to always be the same.
> Our only work around for this is to run our service consuming this message 
> like a cron job and restart it every 15 minutes (period we settled on through 
> experimentation).  This is not how we'd prefer to sun this service, it's 
> quite hacky and we'd like to not have to force a restart to work around what 
> appears to an issue with how the reconnect is handled.
>  
> Here is the stacktrace:
> [DEBUG] 2021-03-17 13:30:48,513 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper$5 
> [SalesforceHttpClient@60c73e58-25 ] - Received messages 
> [{clientId=[--------redacted--------], channel=/meta/connect, id=21, 
> successful=true}][DEBUG] 2021-03-17 13:30:48,513 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper 
> [SalesforceHttpClient@60c73e58-25 ] - [CHANNEL:META_CONNECT]: 
> {clientId=[--------redacted--------], channel=/meta/connect, id=21, 
> successful=true}
> [DEBUG] 2021-03-17 13:32:38,588 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper$5 
> [SalesforceHttpClient@60c73e58-25 ] - Received messages 
> [{clientId=[--------redacted--------], channel=/meta/connect, id=22, 
> successful=true}]
> [DEBUG] 2021-03-17 13:32:38,589 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper 
> [SalesforceHttpClient@60c73e58-25 ] - [CHANNEL:META_CONNECT]: 
> {clientId=[--------redacted--------], channel=/meta/connect, id=22, 
> successful=true}
> [DEBUG] 2021-03-17 13:34:28,665 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper$5 
> [SalesforceHttpClient@60c73e58-25 ] - Received messages 
> [{clientId=[--------redacted--------], channel=/meta/connect, id=23, 
> successful=true}]
> [DEBUG] 2021-03-17 13:34:28,666 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper 
> [SalesforceHttpClient@60c73e58-25 ] - [CHANNEL:META_CONNECT]: 
> {clientId=[--------redacted--------], channel=/meta/connect, id=23, 
> successful=true}[DEBUG] 2021-03-17 13:34:28,766 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper$5 
> [SalesforceHttpClient@60c73e58-32 ] - Received messages 
> [{channel=/meta/disconnect}, {clientId=[--------redacted--------], 
> advice={reconnect=none, interval=0}, channel=/meta/connect, id=24, 
> error=401::Authentication invalid, successful=false}]
> [INFO ] 2021-03-17 13:34:28,769 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper 
> [SalesforceHttpClient@60c73e58-26 ] - Restarting on unexpected disconnect 
> from Salesforce...
> [DEBUG] 2021-03-17 13:34:28,769 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper 
> [SalesforceHttpClient@60c73e58-26 ] - Waiting to disconnect...
> [DEBUG] 2021-03-17 13:34:28,770 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper 
> [SalesforceHttpClient@60c73e58-32 ] - [CHANNEL:META_CONNECT]: 
> {clientId=[--------redacted--------], advice={reconnect=none, interval=0}, 
> channel=/meta/connect, id=24, error=401::Authentication invalid, 
> successful=false}[WARN ] 2021-03-17 13:34:28,771 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper 
> [SalesforceHttpClient@60c73e58-32 ] - Connect failure: 
> {clientId=[--------redacted--------], advice={reconnect=none, interval=0}, 
> channel=/meta/connect, id=24, error=401::Authentication invalid, 
> successful=false}
> [DEBUG] 2021-03-17 13:34:33,769 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper 
> [SalesforceHttpClient@60c73e58-26 ] - Pausing for 0 msecs before restart 
> attempt
> [DEBUG] 2021-03-17 13:34:33,770 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper 
> [SalesforceHttpClient@60c73e58-26 ] - Stopped the helper and destroyed the 
> client
> [DEBUG] 2021-03-17 13:34:33,862 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper$5 
> [SalesforceHttpClient@60c73e58-30 ] - Received messages 
> [{ext={sfdc={failureReason=401::Authentication invalid}, replay=true, 
> payload.format=true}, advice={reconnect=none}, channel=/meta/handshake, 
> id=25, error=403::Handshake denied, successful=false}][DEBUG] 2021-03-17 
> 13:34:33,863 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper 
> [SalesforceHttpClient@60c73e58-30 ] - [CHANNEL:META_HANDSHAKE]: 
> {ext={sfdc={failureReason=401::Authentication invalid}, replay=true, 
> payload.format=true}, advice={reconnect=none}, channel=/meta/handshake, 
> id=25, error=403::Handshake denied, successful=false}
> [WARN ] 2021-03-17 13:34:33,863 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper 
> [SalesforceHttpClient@60c73e58-30 ] - Handshake failure: 
> {ext={sfdc={failureReason=401::Authentication invalid}, replay=true, 
> payload.format=true}, advice={reconnect=none}, channel=/meta/handshake, 
> id=25, error=403::Handshake denied, successful=false}
> [INFO ] 2021-03-17 13:34:33,863 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper 
> [SalesforceHttpClient@60c73e58-30 ] - Cleaning session (logout) from 
> SalesforceSession before restarting client
> [INFO ] 2021-03-17 13:34:33,867 org.cometd.bayeux.client.ClientSession 
> [SalesforceHttpClient@60c73e58-30 ] - Exception while invoking listener 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper$1...@7574cf75java.lang.NullPointerException:
>  null    at 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper$1.onMessage(SubscriptionHelper.java:148)
>     at 
> org.cometd.common.AbstractClientSession$AbstractSessionChannel.notifyOnMessage(AbstractClientSession.java:583)
>     at 
> org.cometd.common.AbstractClientSession$AbstractSessionChannel.notifyMessageListeners(AbstractClientSession.java:568)
>     at 
> org.cometd.common.AbstractClientSession.notifyListeners(AbstractClientSession.java:308)
>     at 
> org.cometd.common.AbstractClientSession.lambda$receive$4(AbstractClientSession.java:269)
>     at org.cometd.bayeux.Promise$2.succeed(Promise.java:103)    at 
> org.cometd.common.AsyncFoldLeft$AbstractLoop.run(AsyncFoldLeft.java:199)    
> at org.cometd.common.AsyncFoldLeft.run(AsyncFoldLeft.java:93)    at 
> org.cometd.common.AbstractClientSession.extendIncoming(AbstractClientSession.java:103)
>     at 
> org.cometd.common.AbstractClientSession.receive(AbstractClientSession.java:263)
>     at org.cometd.client.BayeuxClient.failHandshake(BayeuxClient.java:721)    
> at org.cometd.client.BayeuxClient.processHandshake(BayeuxClient.java:707)    
> at org.cometd.client.BayeuxClient.processMessages(BayeuxClient.java:615)    
> at org.cometd.client.BayeuxClient.access$2000(BayeuxClient.java:101)    at 
> org.cometd.client.BayeuxClient$MessageTransportListener.onMessages(BayeuxClient.java:1260)
>     at 
> org.cometd.client.transport.LongPollingTransport$2.onComplete(LongPollingTransport.java:240)
>     at 
> org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:218)
>     at 
> org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:210)
>     at 
> org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:481)
>     at 
> org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:461)
>     at 
> org.eclipse.jetty.client.HttpReceiver.responseSuccess(HttpReceiver.java:424)  
>   at 
> org.eclipse.jetty.client.http.HttpReceiverOverHTTP.messageComplete(HttpReceiverOverHTTP.java:365)
>     at 
> org.eclipse.jetty.http.HttpParser.handleContentMessage(HttpParser.java:585)   
>  at org.eclipse.jetty.http.HttpParser.parseContent(HttpParser.java:1702)    
> at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1531)    at 
> org.eclipse.jetty.client.http.HttpReceiverOverHTTP.parse(HttpReceiverOverHTTP.java:204)
>     at 
> org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:144)
>     at 
> org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:79)
>     at 
> org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:131)
>     at 
> org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:169)
>     at 
> org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
>     at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)    
> at 
> org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:540)
>     at 
> org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:395)    
> at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:161) 
>    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)    at 
> org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)    at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
>     at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
>     at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
>     at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
>     at 
> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:375)
>     at 
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:773)
>     at 
> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:905)
>     at java.base/java.lang.Thread.run(Thread.java:834)
> [ERROR] 2021-03-17 13:36:23,773 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper 
> [SalesforceHttpClient@60c73e58-26 ] - Error restarting: Exception during 
> HANDSHAKE: 401::Authentication invalidorg.apache.camel.CamelException: 
> Exception during HANDSHAKE: 401::Authentication invalid    at 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper.connect(SubscriptionHelper.java:223)
>     at 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper.doStart(SubscriptionHelper.java:212)
>     at 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper.performClientRestart(SubscriptionHelper.java:304)
>     at 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper.access$1000(SubscriptionHelper.java:60)
>     at 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper$4.run(SubscriptionHelper.java:249)
>     at 
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:773)
>     at 
> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:905)
>     at java.base/java.lang.Thread.run(Thread.java:834)Caused by: 
> org.apache.camel.component.salesforce.api.SalesforceException: 
> 401::Authentication invalid    at 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper.getFailure(SubscriptionHelper.java:340)
>     at 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper.access$300(SubscriptionHelper.java:60)
>     at 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper$1.onMessage(SubscriptionHelper.java:132)
>     at 
> org.cometd.common.AbstractClientSession$AbstractSessionChannel.notifyOnMessage(AbstractClientSession.java:583)
>     at 
> org.cometd.common.AbstractClientSession$AbstractSessionChannel.notifyMessageListeners(AbstractClientSession.java:568)
>     at 
> org.cometd.common.AbstractClientSession.notifyListeners(AbstractClientSession.java:308)
>     at 
> org.cometd.common.AbstractClientSession.lambda$receive$4(AbstractClientSession.java:269)
>     at org.cometd.bayeux.Promise$2.succeed(Promise.java:103)    at 
> org.cometd.common.AsyncFoldLeft$AbstractLoop.run(AsyncFoldLeft.java:199)    
> at org.cometd.common.AsyncFoldLeft.run(AsyncFoldLeft.java:93)    at 
> org.cometd.common.AbstractClientSession.extendIncoming(AbstractClientSession.java:103)
>     at 
> org.cometd.common.AbstractClientSession.receive(AbstractClientSession.java:263)
>     at org.cometd.client.BayeuxClient.failHandshake(BayeuxClient.java:721)    
> at org.cometd.client.BayeuxClient.processHandshake(BayeuxClient.java:707)    
> at org.cometd.client.BayeuxClient.processMessages(BayeuxClient.java:615)    
> at org.cometd.client.BayeuxClient.access$2000(BayeuxClient.java:101)    at 
> org.cometd.client.BayeuxClient$MessageTransportListener.onMessages(BayeuxClient.java:1260)
>     at 
> org.cometd.client.transport.LongPollingTransport$2.onComplete(LongPollingTransport.java:240)
>     at 
> org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:218)
>     at 
> org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:210)
>     at 
> org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:481)
>     at 
> org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:461)
>     at 
> org.eclipse.jetty.client.HttpReceiver.responseSuccess(HttpReceiver.java:424)  
>   at 
> org.eclipse.jetty.client.http.HttpReceiverOverHTTP.messageComplete(HttpReceiverOverHTTP.java:365)
>     at 
> org.eclipse.jetty.http.HttpParser.handleContentMessage(HttpParser.java:585)   
>  at org.eclipse.jetty.http.HttpParser.parseContent(HttpParser.java:1702)    
> at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1531)    at 
> org.eclipse.jetty.client.http.HttpReceiverOverHTTP.parse(HttpReceiverOverHTTP.java:204)
>     at 
> org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:144)
>     at 
> org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:79)
>     at 
> org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:131)
>     at 
> org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:169)
>     at 
> org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
>     at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)    
> at 
> org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:540)
>     at 
> org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:395)    
> at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:161) 
>    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)    at 
> org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)    at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
>     at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
>     at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
>     at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
>     at 
> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:375)
>     ... 3 common frames omitted
> [ERROR] 2021-03-17 13:36:23,774 
> org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper 
> [SalesforceHttpClient@60c73e58-26 ] - Failed to restart after pausing for 0 
> msecs



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to