Siddharth Seth created YARN-2264:
------------------------------------
Summary: Race in DrainDispatcher can cause random test failures
Key: YARN-2264
URL: https://issues.apache.org/jira/browse/YARN-2264
Project: Hadoop YARN
Issue Type: Bug
Reporter: Siddharth Seth
This is what can happen.
This is the potential race.
DrainDispatcher is started via serviceStart() . As a last step, this starts the
actual dispatcher thread (eventHandlingThread.start() - and returns immediately
- which means the thread may or may not have started up by the time start
returns.
Event sequence:
UserThread: calls dispatcher.getEventHandler().handle()
This sets drained = false, and a context switch happens.
DispatcherThread: starts running
DispatcherThread drained = queue.isEmpty(); -> This sets drained to true, since
Thread1 yielded before putting anything into the queue.
UserThread: actual.handle(event) - which puts the event in the queue for the
dispatcher thread to process, and returns control.
UserThread: dispatcher.await() - Since drained is true, this returns
immediately - even though there is a pending event to process.
--
This message was sent by Atlassian JIRA
(v6.2#6252)