You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Rick Hillegas (JIRA)" <ji...@apache.org> on 2018/06/21 00:40:00 UTC

[jira] [Commented] (DERBY-6999) tooMuchContentionException thrown during concurrent inserts

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

Rick Hillegas commented on DERBY-6999:
--------------------------------------

Thanks for providing the repro, Pavol. I have successfully built the repro using "mvn compile". Now I need some more context:

I'm not a maven user. How do I run the program? Thanks.

> tooMuchContentionException thrown during concurrent inserts
> -----------------------------------------------------------
>
>                 Key: DERBY-6999
>                 URL: https://issues.apache.org/jira/browse/DERBY-6999
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.13.1.1, 10.14.2.0
>         Environment: hibernate + spring
>            Reporter: Pavol Liška
>            Priority: Major
>
> During many concurrent inserts derby throws tooMuchContentionExpection.
> {code:java}
> org.hibernate.exception.LockAcquisitionException: could not execute statement
>     at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:75)
>     at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
>     at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111)
>     at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:97)
>     at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:178)
>     at org.hibernate.id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:45)
>     at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3037)
>     at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3628)
>     at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:81)
>     at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:645)
>     at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:282)
>     at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:263)
>     at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:317)
>     at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:359)
>     at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:292)
>     at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:200)
>     at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:131)
>     at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)
>     at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38)
>     at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177)
>     at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32)
>     at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73)
>     at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:709)
>     at org.hibernate.internal.SessionImpl.save(SessionImpl.java:701)
>     at org.hibernate.internal.SessionImpl.save(SessionImpl.java:696)
>     at sk.palo.liska.ServiceImpl.saveTable(ServiceImpl.java:31)
>     at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source)
>     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>     at java.lang.reflect.Method.invoke(Method.java:498)
>     at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343)
>     at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:197)
>     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
>     at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294)
>     at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)
>     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
>     at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
>     at com.sun.proxy.$Proxy42.saveTable(Unknown Source)
>     at sk.palo.liska.ServiceImplTest.lambda$insertTasks$4(ServiceImplTest.java:237)
>     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>     at java.lang.Thread.run(Thread.java:748)
> Caused by: java.sql.SQLTransactionRollbackException: A lock could not be obtained within the time requested
>     at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
>     at org.apache.derby.impl.jdbc.Util.generateCsSQLException(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.ConnectionChild.handleException(Unknown Source)
>     at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown Source)
>     at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown Source)
>     at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeLargeUpdate(Unknown Source)
>     at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeUpdate(Unknown Source)
>     at org.apache.commons.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:98)
>     at org.apache.commons.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:98)
>     at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:175)
>     ... 37 common frames omitted
> Caused by: org.apache.derby.iapi.error.StandardException: A lock could not be obtained within the time requested
>     at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
>     at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
>     at org.apache.derby.impl.sql.catalog.SequenceUpdater.tooMuchContentionException(Unknown Source)
>     at org.apache.derby.impl.sql.catalog.SequenceUpdater.getCurrentValueAndAdvance(Unknown Source)
>     at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getCurrentValueAndAdvance(Unknown Source)
>     at org.apache.derby.impl.sql.execute.BaseActivation.getCurrentValueAndAdvance(Unknown Source)
>     at org.apache.derby.impl.sql.execute.InsertResultSet.getSetAutoincrementValue(Unknown Source)
>     at org.apache.derby.impl.sql.execute.BaseActivation.getSetAutoincrementValue(Unknown Source)
>     at org.apache.derby.exe.ac292a80bcx0164x1c65xaecfx00000d3715680.e0(Unknown Source)
>     at org.apache.derby.impl.services.reflect.DirectCall.invoke(Unknown Source)
>     at org.apache.derby.impl.sql.execute.RowResultSet.getNextRowCore(Unknown Source)
>     at org.apache.derby.impl.sql.execute.NormalizeResultSet.getNextRowCore(Unknown Source)
>     at org.apache.derby.impl.sql.execute.DMLWriteResultSet.getNextRowCore(Unknown Source)
>     at org.apache.derby.impl.sql.execute.InsertResultSet.getNextRowCore(Unknown Source)
>     at org.apache.derby.impl.sql.execute.InsertResultSet.open(Unknown Source)
>     at org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(Unknown Source)
>     at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown Source)
>     ... 44 common frames omitted
> {code}
> Setup: transaction management with spring + hibernate.
> Test code is here: [https://github.com/paloliska/tooMuchContention]
>  - _master_ branch has derby version 10.13.1.1, hibernate 4.3.11, and spring 4.3.7.
>  - _latest_dependencies_ branch has latest versions.
> Run test with:
> {code:java}
> mvn test
> {code}
> Tests are not stable. But with proper setup, you could make to fail all of them. Depends on current hardware, load. In Tests also could be set number of threads and timeout for each test. Test will run until timeout or fail.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)