Uploaded image for project: 'Hadoop YARN'
  1. Hadoop YARN
  2. YARN-2264

Race in DrainDispatcher can cause random test failures

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 2.6.0
    • Component/s: None
    • Labels:
      None
    • Target Version/s:
    • Hadoop Flags:
      Reviewed

      Description

      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.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                gtCarrera9 Li Lu
                Reporter:
                sseth Siddharth Seth
              • Votes:
                0 Vote for this issue
                Watchers:
                5 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: