Uploaded image for project: 'Commons DBCP'
  1. Commons DBCP
  2. DBCP-260

borrowObject from the AbandonedObjectPool hangs on a wait() method when the WHEN_EXHAUSTED_BLOCK is set

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • 1.2, 1.2.1, 1.2.2, 1.3, 1.4
    • 2.0
    • None
    • Windows XP, eclipse. JDK 1.6

    Description

      This bug is related to bugs #1, #38 & #102. Thought the bugs are closed, I think there is a (edge condition) scenario that is not handled properly:

      Config:
      10 active connections limit
      RemoveAbandoned set to 'on'
      RemoveAbandonedTimeout set to x (say 60 secs)

      Suppose 10 connections were borrowed and the 11 th request was issued, all within a time frame shorted then the timeout.

      The first 10 requests are in methods that do not properly release the connection.

      This means that the 11 th thread is waiting indefinitely until a notify is sent.
      The 'non releasing' threads the first 10 connections hence no notification is sent
      The 'garbage collection' is performed by the calling AbandonedObjectPool before calling the GenericObjectPool.borrowObject(...). This garbage collection will not be called again and the wait() will stay locked though some connections might be come available through timeout expiration.

      The quick n dirty workaround is to setMaxWait(...) but still I think a better solution will be along the lines of:
      1. Waiting for removeAbandonedTimeout secs
      2. Retry regular allocation

      Attachments

        Activity

          People

            Unassigned Unassigned
            meiriko Meir Shahar
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: