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

Jon Steinich commented on DERBY-5603:
-------------------------------------

Ah, I didn't realize they were generally removed prior to that point.  Now 
something that seemed irrelevant before is likely the key...
We have 2 connections open to the database; one for reading and one for 
writing.  The read connection is probably reading in a blob (creating one) 
while the commit is clearing on the write connection.

It wasn't under high load or low memory when the error occurred.  We always 
call createBlob() and then write to its output stream.
                
> EmbedConnection.clearLOBMapping() incorrectly clears lobFiles causing a 
> ConcurrentModificationException
> -------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-5603
>                 URL: https://issues.apache.org/jira/browse/DERBY-5603
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.5.1.1, 10.8.2.2
>         Environment: Win 7 64 bit
> JDK 1.6.0_24
>            Reporter: Jon Steinich
>            Assignee: Kristian Waagan
>            Priority: Critical
>         Attachments: derby-5603-1a-avoid_concurrentmodification.diff
>
>   Original Estimate: 1h
>  Remaining Estimate: 1h
>
> In EmbedConnection.clearLOBMapping()  the code which iterates over lobFiles 
> has a finally block which clears the Set.  This causes a 
> ConcurrentModificationException to be thrown and even using a concurrent data 
> structure would still result in only one LOBFile being correctly closed.
> This will occur anytime the lobFiles Set contains more than 1 LOBFile.
> Stack Trace:
> java.sql.SQLException: Java exception: ': 
> java.util.ConcurrentModificationException'. 
>  at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown 
> Source) 
>  at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source) 
>  at org.apache.derby.impl.jdbc.Util.javaException(Unknown Source) 
>  at 
> org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown 
> Source) 
>  at 
> org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown 
> Source) 
>  at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown 
> Source) 
>  at org.apache.derby.impl.jdbc.EmbedConnection.commit(Unknown Source) 
> <lines removed>
> Caused by: java.sql.SQLException: Java exception: ': 
> java.util.ConcurrentModificationException'. 
>  at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown 
> Source) 
>  at 
> org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown
>  Source) 
>  ... 16 more 
> Caused by: java.util.ConcurrentModificationException 
>  at java.util.HashMap$HashIterator.nextEntry(Unknown Source) 
>  at java.util.HashMap$KeyIterator.next(Unknown Source) 
>  at org.apache.derby.impl.jdbc.EmbedConnection.clearLOBMapping(Unknown 
> Source) 
>  ... 10 more

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to