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