nabarun created GEODE-4096:
------------------------------

             Summary: Race Condition between 
ConcurrentSerialGatewaySenderEventProcessor stopper thread and the 
_dispatchBatch method for the connection global variable.
                 Key: GEODE-4096
                 URL: https://issues.apache.org/jira/browse/GEODE-4096
             Project: Geode
          Issue Type: Bug
          Components: wan
            Reporter: nabarun


*+Order of execution for this race condition to occur+*.
#  _dispatchBatch is trying to dispatch a batch of events but was somehow 
unsuccessful 
# It silently decides that the remote server may not be ready so it wants to 
retry
# Same time we decide to stop the SerialGatewaySenderEventProcessor hence we 
call the Stopper Thread.
# Before the threads are started on all the senders / dispatchers it sets the 
isStopped flag for the SerialGatewaySenderEventProcessor to true.
# Then the _dispatchBatch method which was in retry mode makes a getConnection 
call to get the connection. This method does a check on the 
SerialGatewaySenderEventProcessor's isStopped flag. It sees that the flag is 
false and this return null.
# This null is stored in the global variable connection for the dispatcher.
# Now that the _dispatchBatch method calls sees that the connection is null it 
should raise an exception and destroyConnection.
# Meanwhile there was a AckThreadReader that was running and the stopper thread 
for the event processor wants to stop it, but since the connection global 
variable was set to null by the get connection method call by _disptachBatch.
# Hence the shutDownAckReaderThreadConnection is executed on null and hence the 
AckReaderThread continues to keep running - being stuck on socketRead0.
# But the problem is that the AckReaderThread acquire a 
connectionLifeCycle.readLock. to readAcknowledgement, but the destroyConnection 
calls from the stopper thread and _dispatchBatch's exception handling code 
needs a connectionLifeCycleLock.writeLock which they can't because readLock is 
held by the AckReaderThread, causing a deadlock






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

Reply via email to