[ 
https://issues.apache.org/jira/browse/SOLR-2045?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

James Dyer updated SOLR-2045:
-----------------------------

    Attachment: SOLR-2045.patch

This patch fixes the problem by issuing a "commit" before closing the 
connection, as suggested by Fenior.  

I added Derby as a randomly-selected test db to have coverage for this bug.  As 
derby is only needed for testing, I configured Ivy to locate the derby jar in 
the same directory as the hsqldb jar, under the dih example.  

I also added the 2 db jars to the Eclipse dot.classpath and to the Idea config 
files so that you can easily run these tests from either ide. (this is my first 
exposure to Idea but with all the good words I've heard on this mailing list I 
thought this a good time to try it out...)

I plan on committing this patch tomorrow.
                
> DIH doesn't release jdbc connections in conjunction with DB2 
> -------------------------------------------------------------
>
>                 Key: SOLR-2045
>                 URL: https://issues.apache.org/jira/browse/SOLR-2045
>             Project: Solr
>          Issue Type: Bug
>          Components: contrib - DataImportHandler
>    Affects Versions: 1.4.1, 3.6, 4.0
>         Environment: DB2 SQLLIB 9.5, 9.7 jdbc Driver
>            Reporter: Fenlor Sebastia
>            Assignee: James Dyer
>             Fix For: 4.1, 5.0
>
>         Attachments: SOLR-2045.patch
>
>
> 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);
>     }
>   }

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to