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

InterruptedException consumed and not reset by PoolingDataSource.getConnection()

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 2.1.1
    • Fix Version/s: 2.2.0
    • Labels:
      None

      Description

      If while PoolingDataSource.getConnection() is waiting for an available connection, Thread.interrupt() is called against the current thread, an java.lang.InterruptedException is caught internally but not reset.

      It is however thrown out wrapped in an java.sql.SQLException.

      A stack trace of such an occurrence is as follows:

      java.sql.SQLException: Cannot get a connection, general error
      	at org.apache.commons.dbcp2.PoolingDataSource.getConnection(PoolingDataSource.java:146)
      	at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1533)
      Caused by: java.lang.InterruptedException
      	at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(AbstractQueuedSynchronizer.java:1220)
      	at java.util.concurrent.locks.ReentrantLock.lockInterruptibly(ReentrantLock.java:335)
      	at org.apache.commons.pool2.impl.LinkedBlockingDeque.pollFirst(LinkedBlockingDeque.java:624)
      	at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:444)
      	at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363)
      	at org.apache.commons.dbcp2.PoolingDataSource.getConnection(PoolingDataSource.java:134)
      	... 8 more
      

      Since the interrupt status flag is not reset, it is left to the caller to look out for it and perform the interrupt specific logic, or reset the flag. i.e.

      try {
          ds.getConnection()
      } catch (SQLException e) {
          if (e.getCause() instanceof InterruptedException) {
              Thread.current.interrupted();
          }
          ...
      }
      

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              antak Atsushi Nakagawa
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: