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

Rick Hillegas commented on DERBY-6975:
--------------------------------------

Hey David,

I'm sorry for my tardy response. I did not see your comment at the end of 
October.

It looks like you have tripped across DERBY-6934. Since only one thread is 
inserting at a time and it seems to be inserting only one row at a time, then I 
think that the following workaround may be sufficient:

1) Don't use getGeneratedKeys(). It doesn't work properly and it causes these 
lock collisions.

2) Instead, after each row is inserted, call 
SYSCS_UTIL.SYSCS_PEEK_AT_IDENTITY() to find the next value which the identity 
generator will produce. The identity value you just inserted should be the 
value of SYSCS_UTIL.SYSCS_PEEK_AT_IDENTITY() minus the quantity by which the 
identity generator increments each time (that's probably the default value of 
1).

Let me know if this works or if you are still having trouble. I will try to do 
a better job of checking this issue for new activity.

Hope this helps,
-Rick


> ERROR 40XL1: A lock could not be obtained within the time requested 
> --------------------------------------------------------------------
>
>                 Key: DERBY-6975
>                 URL: https://issues.apache.org/jira/browse/DERBY-6975
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.14.1.0
>            Reporter: David Sitsky
>
> I have an application that when run on a certain dataset, every 5 runs I 
> might see this error happening.  The code is creating a lot of rows using a 
> sequence generator.
> {noformat}
> Caused by: ERROR 40XL1: A lock could not be obtained within the time 
> requested 
>         at 
> org.apache.derby.iapi.error.StandardException.newException(StandardException.java)
>  
>         at 
> org.apache.derby.iapi.error.StandardException.newException(StandardException.java)
>  
>         at 
> org.apache.derby.impl.sql.catalog.SequenceUpdater.tooMuchContentionException(SequenceUpdater.java)
>  
>         at 
> org.apache.derby.impl.sql.catalog.SequenceUpdater.getCurrentValueAndAdvance(SequenceUpdater.java)
>  
>         at 
> org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getCurrentValueAndAdvance(DataDictionaryImpl.java)
>  
>         at 
> org.apache.derby.impl.sql.execute.BaseActivation.getCurrentValueAndAdvance(BaseActivation.java)
>  
>         at 
> org.apache.derby.impl.sql.execute.InsertResultSet.getSetAutoincrementValue(InsertResultSet.java)
>  
>         at 
> org.apache.derby.impl.sql.execute.BaseActivation.getSetAutoincrementValue(BaseActivation.java)
>  
>         at 
> org.apache.derby.exe.ac560740aax015fx6bc1x68cax000002339e626a.e0(ac560740aax015fx6bc1x68cax000002339e626a.java)
>  
>         at 
> org.apache.derby.impl.services.reflect.DirectCall.invoke(DirectCall.java) 
>         at 
> org.apache.derby.impl.sql.execute.RowResultSet.getNextRowCore(RowResultSet.java)
>  
>         at 
> org.apache.derby.impl.sql.execute.NormalizeResultSet.getNextRowCore(NormalizeResultSet.java)
>  
>         at 
> org.apache.derby.impl.sql.execute.DMLWriteResultSet.getNextRowCore(DMLWriteResultSet.java)
>  
>         at 
> org.apache.derby.impl.sql.execute.InsertResultSet.getNextRowCore(InsertResultSet.java)
>  
>         at 
> org.apache.derby.impl.sql.execute.InsertResultSet.open(InsertResultSet.java) 
>         at 
> org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java)
>  
>         at 
> org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java)
>  
>         ... 25 more 
> {noformat}
> It is not clear to me why when looking at the code this should be happening.  



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to