You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by km...@apache.org on 2013/10/09 18:00:54 UTC
svn commit: r1530696 -
/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/storetests/st_derby715.java
Author: kmarsden
Date: Wed Oct 9 16:00:54 2013
New Revision: 1530696
URL: http://svn.apache.org/r1530696
Log:
DERBY-3624 testfailure in storetests/st_derby715 with ibm 1.5 on iseries machine; one deadlock message missing
Change test to check locks rather than sleep for synchronization.
Modified:
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/storetests/st_derby715.java
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/storetests/st_derby715.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/storetests/st_derby715.java?rev=1530696&r1=1530695&r2=1530696&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/storetests/st_derby715.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/storetests/st_derby715.java Wed Oct 9 16:00:54 2013
@@ -40,7 +40,7 @@ import org.apache.derby.tools.ij;
The purpose of this test is to reproduce JIRA DERBY-715:
-Sometimes a deadlock would be incorrectly reported as a deadlock. The
+Sometimes a deadlock would be incorrectly reported as a timeout. The
bug seemed to always reproduce at least once if the following test
was run (at least one of the iterations in the loop would get an
incorrect timeout vs. a deadlock).
@@ -129,7 +129,7 @@ public class st_derby715 extends BaseTes
System.out.println("Thread 1 after all next.");
// give thread 2 a chance to catch up.
- Thread.sleep(500);
+ waitForLocks(conn, 2);
if (verbose)
System.out.println("Thread 1 before inserting into a...");
@@ -204,10 +204,8 @@ public class st_derby715 extends BaseTes
if (verbose)
System.out.println("Thread 2 after all next.");
+ waitForLocks(conn,2);
-
- Thread.sleep(500);
-
if (verbose)
System.out.println("Thread 2 before inserting into b");
@@ -245,7 +243,34 @@ public class st_derby715 extends BaseTes
}
}
-
+ /**
+ * Wait for a specified number of locks before continuing
+ *
+ * @param conn Connection to use for lock query
+ * @param num Number of locks to check for
+ */
+ private static void waitForLocks(Connection conn, int num) throws InterruptedException, SQLException {
+ int totalWait = 0;
+ do {
+ totalWait += 500;
+ Thread.sleep(500);
+ } while (numlocks(conn) < num && totalWait < 60000);
+
+ }
+ /**
+ * Get the number of locks in the lock table
+ * @return number of locks
+ * @throws SQLException
+ */
+ private static int numlocks(Connection conn) throws SQLException {
+ Statement s = conn.createStatement();
+ ResultSet rs = s.executeQuery("SELECT count(*) from syscs_diag.lock_table");
+ rs.next();
+ int num = rs.getInt(1);
+ rs.close();
+ return num;
+ }
+
public void testList(Connection conn)
throws SQLException
{