[ 
https://issues.apache.org/jira/browse/DERBY-2990?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12544492
 ] 

Øystein Grøvlen commented on DERBY-2990:
----------------------------------------

The reason ResultSet.getBlob() causes a lock to be held, is to make
sure that the Blob object is stable. (Ref. discussion in DERBY-2892).
In other words, the decribed behavior is intended.

If this JIRA is to be fixed, we will have to implement another mechanism
than locking to guarantee stability of LOB objects.


> ResultSet.getBlob holds locks even with READ_UNCOMMITTED isolation level
> ------------------------------------------------------------------------
>
>                 Key: DERBY-2990
>                 URL: https://issues.apache.org/jira/browse/DERBY-2990
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.1.3.1, 10.2.2.0, 10.3.1.4, 10.4.0.0
>            Reporter: Kathey Marsden
>         Attachments: GetBlobLocks.java
>
>
> ResultSet.getBlob() holds locks even when isolation level is set to 
> TRANSACTION_READ_UNCOMMITTED.   See attached repro
>  java GetBlobLocks
> Exception in thread "main" ERROR 40XL1: A lock could not be obtained within 
> the time requested
>         at org.apache.derby.iapi.error.StandardException.newException(Unknown 
> Source)
>         at org.apache.derby.impl.services.locks.LockSet.lockObject(Unknown 
> Source)
>         at 
> org.apache.derby.impl.services.locks.SinglePool.lockAnObject(Unknown Source)
>         at org.apache.derby.impl.services.locks.SinglePool.lockObject(Unknown 
> Source)
>         at 
> org.apache.derby.impl.store.raw.xact.RowLocking3.lockRecordForWrite(Unknown 
> Source)
>         at 
> org.apache.derby.impl.store.access.conglomerate.OpenConglomerate.lockPositionForWrite(Unknown
>  Source)
>         at 
> org.apache.derby.impl.store.access.conglomerate.GenericConglomerateController.delete(Unknown
>  Source)
>         at org.apache.derby.impl.sql.execute.RowChangerImpl.deleteRow(Unknown 
> Source)
>         at 
> org.apache.derby.impl.sql.execute.DeleteResultSet.collectAffectedRows(Unknown 
> Source)
>         at org.apache.derby.impl.sql.execute.DeleteResultSet.open(Unknown 
> Source)
>         at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown 
> Source)
>         at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown 
> Source)
>         at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
>         at org.apache.derby.impl.jdbc.EmbedStatement.executeUpdate(Unknown 
> Source)
>         at GetBlobLocks.testBlobLocks(GetBlobLocks.java:46)
>         at GetBlobLocks.main(GetBlobLocks.java:11)
> [C:/kmarsden/repro/getblob] echo $WS

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