You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Lance Norskog (JIRA)" <ji...@apache.org> on 2010/09/28 02:50:45 UTC

[jira] Commented: (SOLR-2045) DIH doesn't release jdbc connections in conjunction with DB2

    [ https://issues.apache.org/jira/browse/SOLR-2045?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12915577#action_12915577 ] 

Lance Norskog commented on SOLR-2045:
-------------------------------------

Mysql has the same problem: incremental updates do not reuse a connection and therefore fail.

> 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
>         Environment: DB2 SQLLIB 9.5, 9.7 jdbc Driver
>            Reporter: Fenlor Sebastia
>
> 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.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org