Uploaded image for project: 'Hadoop Common'
  1. Hadoop Common
  2. HADOOP-10289

o.a.h.u.ReflectionUtils.printThreadInfo() causes deadlock in TestHttpServer

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Patch Available
    • Major
    • Resolution: Unresolved
    • 2.3.0, 3.0.0-alpha1
    • None
    • util
    • None
    • MacOS X 10.9/Java 6 1.6.0_65-b14-462

    Description

      This bug is a followup on HADOOP-9964

      ReflectionUtils.printThreadInfo is now a synchronized method. This change creates sometimes deadlock situation in TestHttpServer if one servlet thread calling this method is waiting on client to consume output.

      In TestHttpServer, several tests connect to the http server only to check the status code but without reading the full inputstream. Depending on HttpURLConnection, the deadlock scenario may be triggered or not.

      Note that in the original ticket, it is not explained why synchronized fixed the issue. According to the attached stacktrace, test was blocked on HttpServer.stop(), waiting on worker threads to stop, which didn't happen because those threads were waiting for their output to be consumed, so the original issue looks very similar to what I'm experiencing.

      My proposed fix is to remove synchronized (as it seems to make the issue worse) but configure HttpServer.stop() to forcibly kill threads after a configurable period of time

      Attachments

        1. TestHttpServer.jstack
          91 kB
          Laurent Goujon
        2. hadoop-10289.patch
          4 kB
          Laurent Goujon

        Issue Links

          Activity

            People

              Unassigned Unassigned
              laurent Laurent Goujon
              Votes:
              1 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated: