Uploaded image for project: 'ServiceMix Components'
  1. ServiceMix Components
  2. SMXCOMP-713

Threading problem in Servicemix-HTTP which renders the component unusable.

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Blocker
    • Resolution: Fixed
    • servicemix-http-2008.01, servicemix-http-2009.01, servicemix-http-2009.02
    • servicemix-http-2010.01
    • servicemix-http
    • None
    • Windows XP, servicemix-http component 2009.02

    Description

      In most of the servicemix-http component versions, including the latest, there is a variable called isSTFlow which is a class variable. This variable appears to be shared among all threads that access a deployed servicemix-http component. The problem with this is that isSTFlow is set by a certain request based upon the state of it's continuation when the exchange response is processed here:

      if (!cont.isPending())

      { isSTFlow = true; System.out.println("isSTFlow set to true because continuation isn't pending."); }

      else

      { isSTFlow = false; System.out.println("isSTFlow set to false because continuation is pending."); If isSTFlow is set to true during that response.. all future requests that come in will then end up executing this code block on line 348: }

      else

      { String id = (String)request.getAttribute(MessageExchange.class.getName()); System.out.println("STFlow was true, removing exchange with id: " + id); locks.remove(id); exchange = exchanges.remove(id); request.removeAttribute(MessageExchange.class.getName()); }

      before the exchange associated with the request has had a chance to return. Once that exchange has returned, it can't be found, because it was removed and throws a timeout error. Once isSTFlow becomes true, the component hits a race condition where it checks isSTFlow for true before the async call has a chance to return and immediately times out the exchange. This variable needs to be localized for each specific request, not global to all requests.

      Attachments

        1. HttpConsumerEndpoint.java
          18 kB
          Ryan Moquin
        2. HttpConsumerEndpoint.java
          18 kB
          Ryan Moquin

        Activity

          People

            jb@nanthrax.net Jean-Baptiste Onofré
            rmoquin Ryan Moquin
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: