Jason created CAMEL-16370:
-----------------------------

             Summary: 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


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:
{noformat}
[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{noformat}



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

Reply via email to