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-6975) ERROR 40XL1: A lock could not be obtained within the time requested
Date Thu, 23 Nov 2017 04:25:00 GMT

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

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

View raw message