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

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

Thanks. I will work with the following command line from run.bat and see if I 
can get this to run outside JUnit. Debugging under either JUnit or maven would 
be difficult:

{noformat}
java -cp target/lib/*;target/classes;target/test-classes 
org.junit.runner.JUnitCore sk.palo.liska.ServiceImplTest
{noformat}

I'll let you know if I have trouble. 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)

Reply via email to