Solr
  1. Solr
  2. SOLR-2045

DIH doesn't release jdbc connections in conjunction with DB2

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.4.1, 3.6, 4.0
    • Fix Version/s: 4.1, 5.0
    • Labels:
      None
    • Environment:

      DB2 SQLLIB 9.5, 9.7 jdbc Driver

      Description

      Using the JDBCDatasource in conjunction with the DB2 JDBC Drivers results in the following error when the DIH tries to close the the connection due to active transactions. As a consequence each delta im port or full import opens a new connection without closing it. So the maximum amount of connections will be reached soon. Setting the connection to readOnly or changing the transaction isolation level doesn't help neither.

      The JDBC Driver I used: "com.ibm.db2.jcc.DB2Driver" relieing in db2jcc4.jar shipped with DB2 Express 9.7 for example

      Here is the stack trace...

      14.08.2010 01:49:51 org.apache.solr.handler.dataimport.JdbcDataSource closeConnection
      FATAL: Ignoring Error when closing connection
      com.ibm.db2.jcc.am.SqlException: [jcc][10251][10308][4.8.87] java.sql.Connection.close() requested while a transaction is in progress on the connection.The transaction remains active, and the connection cannot be closed. ERRORCODE=-4471, SQLSTATE=null
      at com.ibm.db2.jcc.am.gd.a(gd.java:660)
      at com.ibm.db2.jcc.am.gd.a(gd.java:60)
      at com.ibm.db2.jcc.am.gd.a(gd.java:120)
      at com.ibm.db2.jcc.am.lb.u(lb.java:1202)
      at com.ibm.db2.jcc.am.lb.x(lb.java:1225)
      at com.ibm.db2.jcc.am.lb.v(lb.java:1211)
      at com.ibm.db2.jcc.am.lb.close(lb.java:1195)
      at com.ibm.db2.jcc.uw.UWConnection.close(UWConnection.java:838)
      at org.apache.solr.handler.dataimport.JdbcDataSource.closeConnection(JdbcDataSource.java:399)
      at org.apache.solr.handler.dataimport.JdbcDataSource.close(JdbcDataSource.java:390)
      at org.apache.solr.handler.dataimport.DataConfig$Entity.clearCache(DataConfig.java:173)
      at org.apache.solr.handler.dataimport.DataConfig.clearCaches(DataConfig.java:331)
      at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:339)
      at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:389)
      at org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:370)

      Well the issue can be solved by invoking a commit or rollback directly before the connection.close() statement. Here is the code snipped of changes I made in JdbcDatasource.java

      private void closeConnection() {
      try {
      if (conn != null) {

      if (conn.isReadOnly())

      { LOG.info("connection is readonly, therefore rollback"); conn.rollback(); }

      else

      { LOG.info("connection is not readonly, therefore commit"); conn.commit(); }

      conn.close();
      }
      } catch (Exception e)

      { LOG.error("Ignoring Error when closing connection", e); }

      }

      1. SOLR-2045.patch
        33 kB
        James Dyer
      2. SOLR-2045.patch
        42 kB
        James Dyer

        Issue Links

          Activity

          No work has yet been logged on this issue.

            People

            • Assignee:
              James Dyer
              Reporter:
              Fenlor Sebastia
            • Votes:
              6 Vote for this issue
              Watchers:
              9 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development