[ 
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.

Reply via email to