db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rick Hillegas (JIRA)" <j...@apache.org>
Subject [jira] Commented: (DERBY-48) A connection request that has a default schema that is being created by another transaction will fail to connect
Date Mon, 11 Aug 2008 20:00:44 GMT

    [ https://issues.apache.org/jira/browse/DERBY-48?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12621573#action_12621573
] 

Rick Hillegas commented on DERBY-48:
------------------------------------

Hi Dag,

The derby-48b-1 patch looks like it is doing the right thing and I have hand-verified that
the transactional behavior is as you describe. The release note looks good now.

It's hard not to regret the old decision to violate the ANSI rules and create schemas implicitly
on the fly. I wonder whether we are just exchanging one edge case for another. With this patch,
there is now a path by which transactional work can be committed on behalf of your connection
even though you explicitly rollback your transaction. I'm afraid I'm not smart enough to know
whether this edge case is already violating some assumptions made elsewhere in the code. At
the very least, it will require us to put another post-it on our brains next to the note about
implicit schema creation.

>  A connection request that has a default schema that is being created by another transaction
will fail to connect
> -----------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-48
>                 URL: https://issues.apache.org/jira/browse/DERBY-48
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.0.2.0, 10.0.2.1, 10.0.2.2, 10.1.1.0
>            Reporter: Kathey Marsden
>            Assignee: Dag H. Wanvik
>             Fix For: 10.5.0.0
>
>         Attachments: derby-48-1.diff, derby-48-1.stat, derby-48-2.diff, derby-48-2.stat,
derby-48-3.diff, derby-48-3.stat, derby-48-4.diff, derby-48-4.stat, derby-48-5.diff, derby-48-5.stat,
derby-48-6.diff, derby-48-6.stat, derby-48-7.diff, derby-48-7.stat, derby-48b-1.diff, derby-48b-1.stat,
LazyDefaultSchemaCreationTest.java, releaseNote.html, releaseNote.html, releaseNote.html,
releaseNote.html
>
>
> A connection request that has a default schema that is being
> created by another transaction will block until that transaction
> completes (or time out). Probably in this situation the connection
> request should be succeed as if the schema does not exist.
> This is a problem in particular for a prepared  XA transaction, where even after restarting
the system, the user cannot reconnect and recover the transaction.
> Here is the reproduction in ij.
> java -Dij.exceptionTrace=true -Dij.protocol=jdbc:derby: -Dij.user=me -Dij.password=pw
org.apache.derby.tools.ij
> ij version 10.0 (C) Copyright IBM Corp. 1997, 2004.
> ij> connect 'testdb;create=true';
> ij> autocommit off;
> ij> create table mytabi(i int);
> 0 rows inserted/updated/deleted
> ij> connect 'testdb';
> ERROR 40XL1: A lock could not be obtained within the time requestedERROR 40XL1: A lock
could not be obtained within the time requested
>         at org.apache.derby.iapi.error.StandardException.newException(StandardException.java:295)
>         at org.apache.derby.impl.services.locks.LockSet.lockObject(LockSet.java:408)
>         at org.apache.derby.impl.services.locks.SinglePool.lockAnObject(SinglePool.java:168)
>         at org.apache.derby.impl.services.locks.SinglePool.lockObject(SinglePool.java:220)
>         at org.apache.derby.impl.store.raw.xact.RowLocking3.lockRecordForRead(RowLocking3.java:181)
>         at org.apache.derby.impl.store.access.heap.HeapController.lockRow(HeapController.java:425)
>         at org.apache.derby.impl.store.access.heap.HeapController.lockRow(HeapController.java:543)
>         at org.apache.derby.impl.store.access.btree.index.B2IRowLocking3.lockRowOnPage(B2IRowLocking3.java:329)
>         at org.apache.derby.impl.store.access.btree.index.B2IRowLocking3._lockScanRow(B2IRowLocking3.java:571)
>         at org.apache.derby.impl.store.access.btree.index.B2IRowLockingRR.lockScanRow(B2IRowLockingRR.java:115)
>         at org.apache.derby.impl.store.access.btree.BTreeForwardScan.fetchRows(BTreeForwardScan.java:374)
>         at org.apache.derby.impl.store.access.btree.BTreeScan.next(BTreeScan.java:1691)
>         at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getDescriptorViaIndex(DataDictionaryImpl.java:7118)
>         at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.locateSchemaRow(DataDictionaryImpl.java:1381)
>         at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getSchemaDescriptor(DataDictionaryImpl.java:1291)
>         at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.initDefaultSchemaDescriptor(GenericLanguageCon
>         at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.initialize(GenericLanguageConnectionContext.ja
>         at org.apache.derby.impl.db.BasicDatabase.setupConnection(BasicDatabase.java:267)
>         at org.apache.derby.impl.jdbc.TransactionResourceImpl.startTransaction(TransactionResourceImpl.java:182)
>         at org.apache.derby.impl.jdbc.EmbedConnection.<init>(EmbedConnection.java:237)
>         at org.apache.derby.impl.jdbc.EmbedConnection20.<init>(EmbedConnection20.java:49)
>         at org.apache.derby.impl.jdbc.EmbedConnection30.<init>(EmbedConnection30.java:56)
>         at org.apache.derby.jdbc.Driver30.getNewEmbedConnection(Driver30.java:68)
>         at org.apache.derby.jdbc.Driver169.connect(Driver169.java:172)
>         at java.sql.DriverManager.getConnection(DriverManager.java:512)
>         at java.sql.DriverManager.getConnection(DriverManager.java:140)
>         at org.apache.derby.impl.tools.ij.ij.dynamicConnection(ij.java:843)
>         at org.apache.derby.impl.tools.ij.ij.ConnectStatement(ij.java:700)
>         at org.apache.derby.impl.tools.ij.ij.ijStatement(ij.java:528)
>         at org.apache.derby.impl.tools.ij.utilMain.go(utilMain.java:283)
>         at org.apache.derby.impl.tools.ij.Main.go(Main.java:204)
>         at org.apache.derby.impl.tools.ij.Main.mainCore(Main.java:170)
>         at org.apache.derby.impl.tools.ij.Main14.main(Main14.java:50)
>         at org.apache.derby.tools.ij.main(ij.java:54)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message