db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kathey Marsden (JIRA)" <derby-...@db.apache.org>
Subject [jira] Commented: (DERBY-246) XA end() fails with Connection is closed error
Date Sat, 14 May 2005 23:06:05 GMT
     [ http://issues.apache.org/jira/browse/DERBY-246?page=comments#action_65415 ]
     
Kathey Marsden commented on DERBY-246:
--------------------------------------

There are basically three issues with Derby-246

Issue  1 - xa_end  will throw an exception if the logical connection is closed. If the logical
connection is not yet closed when xa_end is called, the transaction ends properly.

AException.errorcode: XAER_RMFAIL
XAER_RMFAIL : Connection is Closed.
org.apache.derby.client.am.XaException: XAER_RMFAIL : Connection is Closed.
        at org.apache.derby.client.net.NetXAResource.throwXAException(NetXAResource.java:736)
        at org.apache.derby.client.net.NetXAResource.throwXAException(NetXAResource.java:631)
        at org.apache.derby.client.net.NetXAResource.connectionClosedFailure(NetXAResource.java:926)
        at org.apache.derby.client.net.NetXAResource.end(NetXAResource.java:252)



Issue 2 - A Lock timeout occurs when trying to  reconnect with the same user after the connection
is closed error, because the automatic  schema creation is not complete.  You can reconnect
with user "APP" because that schema exists.

ERROR 40XL1: A lock could not be obtained within the time requested

	at org.apache.derby.iapi.error.StandardException.newException(StandardException.java:301)

	at org.apache.derby.impl.services.locks.LockSet.lockObject(LockSet.java:414)

	at org.apache.derby.impl.services.locks.SinglePool.lockAnObject(SinglePool.java:174)

	at org.apache.derby.impl.services.locks.SinglePool.lockObject(SinglePool.java:226)

	at org.apache.derby.impl.store.raw.xact.RowLocking3.lockRecordForRead(RowLocking3.java:187)

	at org.apache.derby.impl.store.access.heap.HeapController.lockRow(HeapController.java:518)

	at org.apache.derby.impl.store.access.heap.HeapController.lockRow(HeapController.java:636)

	at org.apache.derby.impl.store.access.btree.index.B2IRowLocking3.lockRowOnPage(B2IRowLocking3.java:332)

	at org.apache.derby.impl.store.access.btree.index.B2IRowLocking3._lockScanRow(B2IRowLocking3.java:574)

	at org.apache.derby.impl.store.access.btree.index.B2IRowLockingRR.lockScanRow(B2IRowLockingRR.java:119)

	at org.apache.derby.impl.store.access.btree.BTreeForwardScan.fetchRows(BTreeForwardScan.java:380)

	at org.apache.derby.impl.store.access.btree.BTreeScan.next(BTreeScan.java:1696)

	at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getDescriptorViaIndex(DataDictionaryImpl.java:7124)

	at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.locateSchemaRow(DataDictionaryImpl.java:1386)

	at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getSchemaDescriptor(DataDictionaryImpl.java:1296)

	at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.initDefaultSchemaDescriptor(GenericLanguageConnectionContext.java:350)

	at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.initialize(GenericLanguageConnectionContext.java:332)

	at org.apache.derby.impl.db.BasicDatabase.setupConnection(BasicDatabase.java:272)

	at org.apache.derby.impl.jdbc.TransactionResourceImpl.startTransaction(TransactionResourceImpl.java:188)

	at org.apache.derby.impl.jdbc.EmbedConnection.<init>(EmbedConnection.java:242)

	at org.apache.derby.impl.jdbc.EmbedConnection30.<init>(EmbedConnection30.java:72)

	at org.apache.derby.jdbc.Driver30.getNewEmbedConnection(Driver30.java:73)

	at org.apache.derby.jdbc.InternalDriver.connect(InternalDriver.java:183)

	at org.apache.derby.impl.drda.Database.makeConnection(Database.java:248)

	at org.apache.derby.impl.drda.DRDAConnThread.getConnFromDatabaseName(DRDAConnThread.java:1132)

	at org.apache.derby.impl.drda.DRDAConnThread.verifyUserIdPassword(DRDAConnThread.java:1110)

	at org.apache.derby.impl.drda.DRDAConnThread.parseSECCHK(DRDAConnThread.java:2648)

	at org.apache.derby.impl.drda.DRDAConnThread.parseDRDAConnection(DRDAConnThread.java:973)

	at org.apache.derby.impl.drda.DRDAConnThread.processCommands(DRDAConnThread.java:816)

	at org.apache.derby.impl.drda.DRDAConnThread.run(DRDAConnThread.java:226)




Issue 3 - A lock timeout hoses the connection.  But I seem to recall that this was determined
to not be a bug at one point.  Need to double check on that.




> XA end() fails with Connection is closed error
> ----------------------------------------------
>
>          Key: DERBY-246
>          URL: http://issues.apache.org/jira/browse/DERBY-246
>      Project: Derby
>         Type: Bug
>   Components: Network Client
>     Versions: 10.1.0.0
>  Environment: I am using the 10.1.0 alpha build.
>     Reporter: Dibyendu Majumdar
>     Assignee: Kathey Marsden

>
> I am testing ClientXADataSource.
> It fails when end() is called - here is the output fromn my test program.
> Running test org.simplejta.xatests.common.Test1
> autocommit = false
> No of rows Affected 1
> autocommit = true
> No of rows Affected 1
> org.apache.derby.client.am.XaException: XAER_RMFAIL : Connection is Closed.
> 	at org.apache.derby.client.net.NetXAResource.throwXAException(Unknown Source)
> 	at org.apache.derby.client.net.NetXAResource.throwXAException(Unknown Source)
> 	at org.apache.derby.client.net.NetXAResource.connectionClosedFailure(Unknown Source)
> 	at org.apache.derby.client.net.NetXAResource.end(Unknown Source)
> 	at org.simplejta.xatests.common.Test1.doTest(Test1.java:52)
> 	at org.simplejta.tests.DerbyClientTests.main(DerbyClientTests.java:66)
> Caused by: org.apache.derby.client.am.SqlException: Connection is Closed.
> 	... 4 more
> Test org.simplejta.xatests.common.Test1 failed
> The test program is:
> /*
>  * Test case for multiple logical connections between start() and end().
>  */
> package org.simplejta.xatests.common;
> import java.sql.Connection;
> import java.sql.SQLException;
> import java.sql.Statement;
> import javax.sql.XAConnection;
> import javax.sql.XADataSource;
> import javax.transaction.xa.XAResource;
> import javax.transaction.xa.Xid;
> public class Test1 extends TestCase {
>     public void doTest(XADataSource ds) throws Exception {
>             // Get a XA connection to the underlying data source
>             XAConnection pc1 = ds.getXAConnection();
>             // Get the XA Resource
>             XAResource xar1 = pc1.getXAResource();
>             // Create an Xid
>             Xid xid1 = Utils.createXid(1);
>             // Start the XA transaction
>             xar1.start(xid1, XAResource.TMNOFLAGS);
>             // Get a Logical Connection
>             Connection conn1 = pc1.getConnection();
>             System.out.println("autocommit = " + conn1.getAutoCommit());
>             // Do something with conn1
>             doSomeWork1(conn1, 50);
>             // Close the logical connection
>             conn1.close();
>             // Get another logical connection
>             conn1 = pc1.getConnection();
>             System.out.println("autocommit = " + conn1.getAutoCommit());
>             // Do something with conn1
>             doSomeWork1(conn1, 51);
>             // Close the logical connection
>             conn1.close();
>             // END the branche
>             xar1.end(xid1, XAResource.TMSUCCESS);
>             // Prepare the RMs
>             int prp1 = xar1.prepare(xid1);
>             // Commit transaction
>             xar1.commit(xid1, false);
>             // Close physical connection
>             pc1.close();
>     }
>     private void doSomeWork1(Connection conn, int deptno) throws SQLException {
>         Statement stmt = conn.createStatement();
>         int cnt = stmt
>                 .executeUpdate("INSERT INTO dept VALUES (" + deptno + ", 'BSD', 'LONDON')");
>         System.out.println("No of rows Affected " + cnt);
>         stmt.close();
>         stmt = null;
>     }
> }
> This test works fine with EmbeddedXADataSource. It also works fine with Oracle.
> Also, note that this error seems similar to the error I am getting with DB2 using the
DB2 type 4 driver.
> Running test org.simplejta.xatests.common.Test1
> autocommit = false
> No of rows Affected 1
> autocommit = false
> No of rows Affected 1
> com.ibm.db2.jcc.b.de: XAER_RMFAIL : Connection is Closed. : Exception from native code
during XA
> 	at com.ibm.db2.jcc.uw.UWXAResource.a(UWXAResource.java:695)
> 	at com.ibm.db2.jcc.uw.UWXAResource.a(UWXAResource.java:709)
> 	at com.ibm.db2.jcc.uw.UWXAResource.end(UWXAResource.java:227)
> 	at org.simplejta.xatests.common.Test1.doTest(Test1.java:52)
> 	at org.simplejta.tests.DB2Tests.main(DB2Tests.java:65)
> Caused by: com.ibm.db2.jcc.b.SqlException: Connection is Closed.
> 	at com.ibm.db2.jcc.uw.UWXAResource.a(UWXAResource.java:705)
> 	... 3 more
> Test org.simplejta.xatests.common.Test1 failed
> Curiously, the error appears to corrupt the database. Subsequent attempts to start the
database gives an error.
> org.apache.derby.client.am.SqlException: DERBY SQL error: SQLCODE: -1, SQLSTATE: XJ040,
SQLERRMC: tca[..snip..]XJ040.C..[snip]..STB0:XSTB0.M..[snip]..led to start database 'tca',
see the next exception for details...[snip]..An exception was thrown during transaction abort...[snip]..(server
log:c:\derby\databases\derby.log)
> 	at org.apache.derby.client.am.Connection.completeSqlca(Unknown Source)
> 	at org.apache.derby.client.net.NetConnectionReply.parseRdbAccessFailed(Unknown Source)
> 	at org.apache.derby.client.net.NetConnectionReply.parseAccessRdbError(Unknown Source)
> 	at org.apache.derby.client.net.NetConnectionReply.parseACCRDBreply(Unknown Source)
> 	at org.apache.derby.client.net.NetConnectionReply.readAccessDatabase(Unknown Source)
> 	at org.apache.derby.client.net.NetConnection.readSecurityCheckAndAccessRdb(Unknown Source)
> 	at org.apache.derby.client.net.NetConnection.flowSecurityCheckAndAccessRdb(Unknown Source)
> 	at org.apache.derby.client.net.NetConnection.flowUSRIDPWDconnect(Unknown Source)
> 	at org.apache.derby.client.net.NetConnection.flowConnect(Unknown Source)
> 	at org.apache.derby.client.net.NetConnection.initialize(Unknown Source)
> 	at org.apache.derby.client.net.NetConnection.<init>(Unknown Source)
> 	at org.apache.derby.client.net.NetXAConnection.<init>(Unknown Source)
> 	at org.apache.derby.client.ClientPooledConnection.<init>(Unknown Source)
> 	at org.apache.derby.client.ClientXAConnection.<init>(Unknown Source)
> 	at org.apache.derby.jdbc.ClientXADataSource.getXAConnection(Unknown Source)
> 	at org.apache.derby.jdbc.ClientXADataSource.getXAConnection(Unknown Source)

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message