Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Critical Critical
    • Resolution: Fixed
    • Affects Version/s: 2.0-beta4
    • Fix Version/s: 2.0-beta5
    • Component/s: Appenders
    • Labels:
      None

      Description

      We found a Deadlock in the SocketAppender (TCPSocketManager.java), when the reconnectionDelay is used.
      A JUnit-Testcase (testTcpAppenderDeadlock()) has been attached, which reproduced the deadlock.

      Description of the JUnit-Testcase:
      • No SocketServer is startet
      • We generate a SocketAppender with a reconnectionDelay= 10sec
      • The SocketAppender acknowledges that no SocktServer is there, and start the timeout
      • During reconnectionDelay the SocketServer started and something is logged
      • Now the user-thread (here the JUNIT-Thread) and the Reconnector-Thread are blocking each other forever

      An additional Issue occurs:
      If no SocketServer is available at the start of the SocketAppender, each user-thread is blocked at every logging operation up to the defined reconnection-time!

      Recommended solution:
      TCPSocketManager.java
      @Override
      protected synchronized void write(final byte[] bytes, final int offset, final int length) {
      // if (socket == null) {
      // if (connector != null)

      { // connector.latch(); // }

      // if (socket == null)

      { // final String msg = "Error writing to " + getName() + " socket not available"; // throw new AppenderRuntimeException(msg); // }

      // }
      if (socket == null) {
      if (connector != null)

      { return; }

      else

      { final String msg = "Error writing to " + getName() + " socket not available"; throw new AppenderRuntimeException(msg); }

      }

        Activity

        Hide
        Werner added a comment -

        JUnitTest for SocketAppender

        Show
        Werner added a comment - JUnitTest for SocketAppender
        Hide
        Ralph Goers added a comment -

        Deadlock was fixed in revision 1470110. A new option, immediateFail, was added to allow the event to not wait for the socket reconnection. Please verify and close.

        Show
        Ralph Goers added a comment - Deadlock was fixed in revision 1470110. A new option, immediateFail, was added to allow the event to not wait for the socket reconnection. Please verify and close.

          People

          • Assignee:
            Ralph Goers
            Reporter:
            Werner
          • Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development