[ https://issues.apache.org/jira/browse/DERBY-6999?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16524119#comment-16524119 ]
Pavol Liška commented on DERBY-6999: ------------------------------------ You could try to modify test setup with these 2 variables in Run.java class: {color:#000080}public static final int {color}{color:#660e7a}TEST_TIMEOUT {color}= {color:#0000ff}10{color}; {color:#000080}private final int {color}{color:#660e7a}nThreads {color}= {color:#0000ff}16{color}; TEST_TIMEOUT is how long will each test run in seconds nThreads is how many threads will be running the task. I propose to rise nThreads. And maybe, also try to do other stuff during running (to utilize cpu or disk). On my computer, I am usuablly 50% successful with current setup (I have core i7, 16g ram, and ssd disk). > 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)