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)

Reply via email to