Vahram Aharonyan created GEODE-3637:
---------------------------------------
Summary: configureClientSSLSocket call can block Acceptor thread
Key: GEODE-3637
URL: https://issues.apache.org/jira/browse/GEODE-3637
Project: Geode
Issue Type: Bug
Components: client/server
Reporter: Vahram Aharonyan
Fix For: 1.3.0
org.apache.geode.internal.net.SocketCreator#configureClientSSLSocket timeout
for Socket is being configured before starting SSL handshake only if passed
"timeout" argument is larger than 0.
Having sslSocket.startHandshake issued without setting timeout can result to
the blocking of caller thread as in GEODE-2898, GEODE-3023.
Below is the example of Handshaker thread stack-trace that got stacked:
"Handshaker /10.124.195.100:10000 Thread 183" Id=526300 in RUNNABLE (running in
native)
Total blocked: 4 Total waited: 884
java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
java.net.SocketInputStream.read(SocketInputStream.java:171)
java.net.SocketInputStream.read(SocketInputStream.java:141)
sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
sun.security.ssl.InputRecord.read(InputRecord.java:503)
sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)
sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
org.apache.geode.internal.net.SocketCreator.configureClientSSLSocket(SocketCreator.java:1088)
org.apache.geode.internal.net.SocketCreator.connect(SocketCreator.java:967)
org.apache.geode.internal.net.SocketCreator.connect(SocketCreator.java:929)
org.apache.geode.internal.net.SocketCreator.connectForServer(SocketCreator.java:908)
org.apache.geode.internal.tcp.Connection.<init>(Connection.java:1306)
org.apache.geode.internal.tcp.Connection.createSender(Connection.java:1094)
org.apache.geode.internal.tcp.ConnectionTable.getOrderedAndOwned(ConnectionTable.java:553)
org.apache.geode.internal.tcp.ConnectionTable.get(ConnectionTable.java:664)
org.apache.geode.internal.tcp.TCPConduit.getConnection(TCPConduit.java:1037)
org.apache.geode.distributed.internal.direct.DirectChannel.getConnections(DirectChannel.java:543)
org.apache.geode.distributed.internal.direct.DirectChannel.sendToMany(DirectChannel.java:319)
org.apache.geode.distributed.internal.direct.DirectChannel.send(DirectChannel.java:605)
org.apache.geode.distributed.internal.membership.gms.mgr.GMSMembershipManager.directChannelSend(GMSMembershipManager.java:1684)
org.apache.geode.distributed.internal.membership.gms.mgr.GMSMembershipManager.send(GMSMembershipManager.java:1875)
org.apache.geode.distributed.internal.DistributionChannel.send(DistributionChannel.java:82)
org.apache.geode.distributed.internal.DistributionManager.sendOutgoing(DistributionManager.java:3416)
org.apache.geode.distributed.internal.DistributionManager.sendMessage(DistributionManager.java:3453)
org.apache.geode.distributed.internal.DistributionManager.putOutgoing(DistributionManager.java:1832)
org.apache.geode.internal.cache.UpdateAttributesProcessor.sendProfileUpdate(UpdateAttributesProcessor.java:162)
org.apache.geode.internal.cache.UpdateAttributesProcessor.distribute(UpdateAttributesProcessor.java:97)
org.apache.geode.internal.cache.DistributedRegion.initialized(DistributedRegion.java:1128)
org.apache.geode.internal.cache.LocalRegion.initialize(LocalRegion.java:2413)
org.apache.geode.internal.cache.DistributedRegion.initialize(DistributedRegion.java:1117)
org.apache.geode.internal.cache.HARegion.initialize(HARegion.java:345)
org.apache.geode.internal.cache.GemFireCacheImpl.createVMRegion(GemFireCacheImpl.java:3308)
org.apache.geode.internal.cache.HARegion.getInstance(HARegion.java:265)
org.apache.geode.internal.cache.ha.HARegionQueue.createHARegion(HARegionQueue.java:348)
org.apache.geode.internal.cache.ha.HARegionQueue.<init>(HARegionQueue.java:328)
org.apache.geode.internal.cache.ha.HARegionQueue$BlockingHARegionQueue.<init>(HARegionQueue.java:2199)
org.apache.geode.internal.cache.ha.HARegionQueue$DurableHARegionQueue.<init>(HARegionQueue.java:2450)
org.apache.geode.internal.cache.ha.HARegionQueue.getHARegionQueueInstance(HARegionQueue.java:2030)
org.apache.geode.internal.cache.tier.sockets.CacheClientProxy$MessageDispatcher.<init>(CacheClientProxy.java:2315)
org.apache.geode.internal.cache.tier.sockets.CacheClientProxy.initializeMessageDispatcher(CacheClientProxy.java:1728)
org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier.initializeProxy(CacheClientNotifier.java:660)
org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier.registerClient(CacheClientNotifier.java:587)
org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier.registerGFEClient(CacheClientNotifier.java:379)
org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier.registerClient(CacheClientNotifier.java:324)
org.apache.geode.internal.cache.tier.sockets.AcceptorImpl.handleNewClientConnection(AcceptorImpl.java:1510)
org.apache.geode.internal.cache.tier.sockets.AcceptorImpl$5.run(AcceptorImpl.java:1298)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:748)
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)