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

Barry Oglesby commented on GEODE-3742:
--------------------------------------

Its possible its not waiting long enough for something on the server, but its 
not clear what that is. Its also possible that there is some interaction 
between the Message Dispatcher thread and the ServerConnection thread that is 
preventing CacheClientProxy from completely pausing.

The 'Unsuccessfully registered' message is coming from CacheClientNotifier 
registerClient.

This message is logged when {{responseByte != 
CommunicationMode.SuccessfulServerToClient.getModeNumber()}}.

Every time that is true, a warning is logged except in one case. That is when 
it can't initialize a CacheClientProxy from that client. In that case, the 
message that is created but not logged is: 'A previous connection attempt from 
this client is still being processed.'

I changed this method to log the warning in the one case it isn't. I also 
changed the 'Unsuccessfully registered' message to include the response code.

This message is also sent back to the client in CacheClientNotifier 
writeMessage. Unfortunately, its ignored on the client.

The CacheClientUpdater constructor is the place that ignores this message. It 
catches and logs several exceptions including ConnectException, SSLException, 
GemFireSecurityException, IOException and ClassNotFoundException.

It doesn't deal with ServerRefusedConnectionException which is the exception 
created in this case.

Instead this exception is handled in QueueManagerImpl initializeQueueConnection 
like:
{noformat}
} catch (Exception e) {
  if (logger.isDebugEnabled()) {
    logger.debug("error creating subscription connection to server {}", 
connection.getEndpoint(), e);
  }
}
{noformat}
Basically, the message being returned from the server is lost, so I also added 
a catch block in CacheClientUpdater constructor to log and rethrow the 
ServerRefusedConnectionException which now logs something like:
{noformat}
[warn 2017/10/04 15:45:04.880 PDT <main> tid=0x1] Cache Client Updater Thread  
on boglesbymac-2(28921)<v2>:32770 port 29869 (localhost:29869): Caught 
following exception while attempting to create a server-to-client communication 
socket and will exit: 
org.apache.geode.cache.client.ServerRefusedConnectionException: <null inet_addr 
hostname><ec>:29869 refused connection: A previous connection attempt from this 
client is still being processed: 
identity(192.168.2.5(28918:loner):52814:275690e9,connection=1,durableAttributes=DurableClientAttributes[id=testBug40165ClientReconnects_client;
 timeout=60])
{noformat}


> CI failure: DeltaPropagationDUnitTest.testBug40165ClientReconnects FAILED 
> with no queus server is available
> -----------------------------------------------------------------------------------------------------------
>
>                 Key: GEODE-3742
>                 URL: https://issues.apache.org/jira/browse/GEODE-3742
>             Project: Geode
>          Issue Type: Bug
>          Components: client queues
>            Reporter: Hitesh Khamesra
>
> org.apache.geode.internal.cache.DeltaPropagationDUnitTest > 
> testBug40165ClientReconnects FAILED
>     org.apache.geode.cache.NoSubscriptionServersAvailableException: 
> org.apache.geode.cache.NoSubscriptionServersAvailableException: Could not 
> initialize a primary queue on startup. No queue servers available.
>         at 
> org.apache.geode.cache.client.internal.QueueManagerImpl.getAllConnections(QueueManagerImpl.java:190)
>         at 
> org.apache.geode.cache.client.internal.OpExecutorImpl.executeOnQueuesAndReturnPrimaryResult(OpExecutorImpl.java:540)
>         at 
> org.apache.geode.cache.client.internal.PoolImpl.executeOnQueuesAndReturnPrimaryResult(PoolImpl.java:842)
>         at 
> org.apache.geode.cache.client.internal.RegisterInterestOp.execute(RegisterInterestOp.java:58)
>         at 
> org.apache.geode.cache.client.internal.ServerRegionProxy.registerInterest(ServerRegionProxy.java:359)
>         at 
> org.apache.geode.internal.cache.LocalRegion.processSingleInterest(LocalRegion.java:3734)
>         at 
> org.apache.geode.internal.cache.LocalRegion.registerInterest(LocalRegion.java:3823)
>         at 
> org.apache.geode.internal.cache.LocalRegion.registerInterest(LocalRegion.java:3625)
>         at 
> org.apache.geode.internal.cache.LocalRegion.registerInterest(LocalRegion.java:3620)
>         at 
> org.apache.geode.internal.cache.LocalRegion.registerInterest(LocalRegion.java:3615)
>         at 
> org.apache.geode.internal.cache.DeltaPropagationDUnitTest.createDurableCacheClient(DeltaPropagationDUnitTest.java:1372)
>         at 
> org.apache.geode.internal.cache.DeltaPropagationDUnitTest.testBug40165ClientReconnects(DeltaPropagationDUnitTest.java:698)
>         Caused by:
>         org.apache.geode.cache.NoSubscriptionServersAvailableException: Could 
> not initialize a primary queue on startup. No queue servers available.
>             at 
> org.apache.geode.cache.client.internal.QueueManagerImpl.initializeConnections(QueueManagerImpl.java:592)
>             at 
> org.apache.geode.cache.client.internal.QueueManagerImpl.start(QueueManagerImpl.java:303)
>             at 
> org.apache.geode.cache.client.internal.PoolImpl.start(PoolImpl.java:346)
>             at 
> org.apache.geode.cache.client.internal.PoolImpl.finishCreate(PoolImpl.java:172)
>             at 
> org.apache.geode.cache.client.internal.PoolImpl.create(PoolImpl.java:158)
>             at 
> org.apache.geode.internal.cache.PoolFactoryImpl.create(PoolFactoryImpl.java:338)
>             at 
> org.apache.geode.internal.cache.DeltaPropagationDUnitTest.createDurableCacheClient(DeltaPropagationDUnitTest.java:1362)
>             ... 1 more



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to