db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kathey Marsden <kmarsdende...@sbcglobal.net>
Subject Re: Working on adding a test case which will reliably run into sequence contention problem
Date Fri, 30 Sep 2011 19:12:49 GMT
On 9/30/2011 11:55 AM, Mamta Satoor wrote:
> Hi,
>
> I think it will be good for us to have a junit test which will
> reliably run into sequence contention problem.

Thank  you Mamta!

$ java -Dderby.locks.waitTimeout=3

I think if the locks.waitTimeout is shorter than the deadlock timeout 
(default 20) we can't hit a deadlock.

Maybe try setting derby.locks.deadlockTimeout instead or if both are 
set, make sure derby.locks.waitTimeout  is longer than 
derby.locks.deadlockTimeout.

http://db.apache.org/derby/docs/dev/ref/rrefproper10607.html

Kathey
-Dderby.language.sequence.preallocator=1 DERBY4437Sequence 10 100000000 
 > dellater.txt The lock timeout trace looks as follows(This stack trace 
is from trunk.I have seen similar behavior with 10.8.2.1 RC) ERROR 
40XL1: A lock could not be obtained within the time requested at 
java.lang.Throwable.<init>(Throwable.java:67) at 
org.apache.derby.iapi.error.StandardException.<init>(StandardException.java:80) 
at 
org.apache.derby.iapi.error.StandardException.<init>(StandardException.java:69) 
at 
org.apache.derby.iapi.error.StandardException.newException(StandardException.java) 
at 
org.apache.derby.impl.services.locks.ConcurrentLockSet.lockObject(ConcurrentLockSet.java:618)

at 
org.apache.derby.impl.services.locks.AbstractPool.lockObject(AbstractPool.java:119) 
at 
org.apache.derby.impl.services.locks.ConcurrentPool.lockObject(ConcurrentPool.java:28) 
at 
org.apache.derby.impl.store.raw.xact.RowLocking3.lockRecordForWrite(RowLocking3.java:248)

at 
org.apache.derby.impl.store.access.conglomerate.OpenConglomerate.lockPositionForWrite(OpenConglomerate.java:587)

at 
org.apache.derby.impl.store.access.conglomerate.GenericConglomerateController.fetch(GenericConglomerateController.java:382)

at 
org.apache.derby.impl.sql.catalog.DataDictionaryImpl.updateCurrentSeqValue(DataDictionaryImpl.java:10279)

at 
org.apache.derby.impl.sql.catalog.DataDictionaryImpl.updateCurrentIdentityValue(DataDictionaryImpl.java:10139)

at 
org.apache.derby.impl.sql.catalog.SequenceUpdater$SyscolumnsUpdater.updateCurrentValueOnDisk(SequenceUpdater.java:596)

at 
org.apache.derby.impl.sql.catalog.SequenceUpdater.updateCurrentValueOnDisk(SequenceUpdater.java:477)

at 
org.apache.derby.impl.sql.catalog.SequenceUpdater.getCurrentValueAndAdvance(SequenceUpdater.java:353)

at 
org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getCurrentValueAndAdvance(DataDictionaryImpl.java:10337)

at 
org.apache.derby.impl.sql.execute.InsertResultSet.getSetAutoincrementValue(InsertResultSet.java:827)

at 
org.apache.derby.impl.sql.execute.BaseActivation.getSetAutoincrementValue(BaseActivation.java:666)

at 
org.apache.derby.exe.ac846c00a0x0132xbb55xece3x00000028ca080.e0(Unknown 
Source) at 
org.apache.derby.impl.services.reflect.DirectCall.invoke(ReflectGeneratedClass.java:139) 
at 
org.apache.derby.impl.sql.execute.RowResultSet.getNextRowCore(RowResultSet.java:148) 
at 
org.apache.derby.impl.sql.execute.NormalizeResultSet.getNextRowCore(NormalizeResultSet.java:185)

at 
org.apache.derby.impl.sql.execute.DMLWriteResultSet.getNextRowCore(DMLWriteResultSet.java:127)

at 
org.apache.derby.impl.sql.execute.InsertResultSet.open(InsertResultSet.java:518) 
at 
org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java:436)

at 
org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:317)

at 
org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1242) 
at 
org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(EmbedPreparedStatement.java:1686)

at 
org.apache.derby.impl.jdbc.EmbedPreparedStatement.execute(EmbedPreparedStatement.java:1341)

at DERBY4437Sequence.run(DERBY4437Sequence.java:61) The test looks as 
follows import java.sql.*; public class DERBY4437Sequence extends Thread 
{ public static void main(String[] args) throws Exception { int 
numberOfThreads = 1000; int numberOfInserts = 100; if (args.length == 1) 
{ numberOfThreads = Integer.parseInt(args[0]); } if (args.length == 2) { 
numberOfThreads = Integer.parseInt(args[0]); numberOfInserts = 
Integer.parseInt(args[1]); } DERBY4437Sequence initThreads[] = new 
DERBY4437Sequence[numberOfThreads]; Connection conn = null; 
Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); conn = 
DriverManager.getConnection( "jdbc:derby:DERBY4437DB;create=true"); 
conn.setAutoCommit(false); Statement st = conn.createStatement(); 
st.executeUpdate("create table sequenceTable(c11 int "+ "generated by 
default as identity, c12 int)"); conn.commit(); conn.close(); 
System.out.println("Get threads going"); for (int i = 0; i < 
numberOfThreads; i++) { initThreads[i] = new DERBY4437Sequence(i, 
numberOfInserts); initThreads[i].start(); sleep(1); } 
System.out.println("Done with threads"); } private int threadNumber; 
private int numberOfInserts; private PreparedStatement ps; private 
Connection conn; DERBY4437Sequence(int threadNumber, int 
numberOfInserts) throws Exception { this.threadNumber = threadNumber; 
this.numberOfInserts = numberOfInserts; conn = 
DriverManager.getConnection( "jdbc:derby:DERBY4437DB"); 
conn.setAutoCommit(false); ps = conn.prepareStatement("insert into "+ 
"sequenceTable(c12) values(1)"); System.out.println("Created ps for 
thread numer" + threadNumber); } public void run() { 
System.out.println(threadNumber + " is now running"); try { for (int i = 
0; i < numberOfInserts; i++) { ps.execute(); if (i%1000 == 0) { 
System.out.println("commit after every 1000 rows " + i + " by thread " + 
threadNumber); conn.commit(); } } } catch (Exception ex) { 
System.out.println("error in thread " + threadNumber); 
ex.printStackTrace(); } System.out.println(threadNumber + " is done 
running"); } }




Mime
View raw message