ozeigermann 2004/12/19 02:35:56
Modified: transaction/src/test/org/apache/commons/transaction/locking
GenericLockTest.java
Log:
Added locking stress test
Revision Changes Path
1.8 +164 -4
jakarta-commons/transaction/src/test/org/apache/commons/transaction/locking/GenericLockTest.java
Index: GenericLockTest.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/transaction/src/test/org/apache/commons/transaction/locking/GenericLockTest.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- GenericLockTest.java 19 Dec 2004 03:07:23 -0000 1.7
+++ GenericLockTest.java 19 Dec 2004 10:35:55 -0000 1.8
@@ -549,4 +549,164 @@
}
}
+
+ public void testStress() throws Throwable {
+
+ sLogger.logInfo("\n\nStress checking locks\n\n");
+
+ final String owner1 = "owner1";
+ final String owner2 = "owner2";
+ final String owner3 = "owner3";
+ final String owner4 = "owner4";
+ final String owner5 = "owner5";
+ final String owner6 = "owner6";
+ final String owner7 = "owner7";
+ final String owner8 = "owner8";
+ final String owner9 = "owner9";
+ final String owner10 = "owner10";
+
+ final String res1 = "res1";
+ final String res2 = "res2";
+ final String res3 = "res3";
+
+ // choose low timeout so sometimes an owner times out
+ final ReadWriteUpgradeLockManager manager = new
ReadWriteUpgradeLockManager(sLogger, 100);
+
+ final RendezvousBarrier restart = new RendezvousBarrier("restart",
5, TIMEOUT, sLogger);
+ final RendezvousBarrier start = new RendezvousBarrier("start", 5,
TIMEOUT, sLogger);
+
+ for (int i = 0; i < CONCURRENT_TESTS; i++) {
+
+ System.out.print(".");
+
+ Thread t1 = new Thread(new Runnable() {
+ public void run() {
+ try {
+ try {
+ synchronized (start) {
+ start.meet();
+ start.reset();
+ }
+ manager.readLock(owner1, res1);
+ manager.readLock(owner1, res2);
+ manager.upgradeLock(owner1, res3);
+ manager.writeLock(owner1, res3);
+ } catch (LockException ie) {
+ } finally {
+ manager.releaseAll(owner1);
+ synchronized (restart) {
+ restart.meet();
+ restart.reset();
+ }
+ }
+ } catch (InterruptedException ie) {
+ }
+ }
+ }, "Thread #1");
+ t1.start();
+
+ Thread t2 = new Thread(new Runnable() {
+ public void run() {
+ try {
+ try {
+ synchronized (start) {
+ start.meet();
+ start.reset();
+ }
+ manager.readLock(owner2, res1);
+ manager.readLock(owner2, res2);
+ manager.upgradeLock(owner2, res3);
+ manager.writeLock(owner2, res3);
+ } catch (LockException ie) {
+ } finally {
+ manager.releaseAll(owner2);
+ synchronized (restart) {
+ restart.meet();
+ restart.reset();
+ }
+ }
+ } catch (InterruptedException ie) {
+ }
+ }
+ }, "Thread #2");
+ t2.start();
+
+ Thread t3 = new Thread(new Runnable() {
+ public void run() {
+ try {
+ try {
+ synchronized (start) {
+ start.meet();
+ start.reset();
+ }
+ manager.readLock(owner3, res1);
+ manager.readLock(owner3, res2);
+ manager.upgradeLock(owner3, res3);
+ manager.writeLock(owner3, res3);
+ } catch (LockException ie) {
+ } finally {
+ manager.releaseAll(owner3);
+ synchronized (restart) {
+ restart.meet();
+ restart.reset();
+ }
+ }
+ } catch (InterruptedException ie) {
+ }
+ }
+ }, "Thread #3");
+ t3.start();
+
+ Thread t4 = new Thread(new Runnable() {
+ public void run() {
+ try {
+ try {
+ synchronized (start) {
+ start.meet();
+ start.reset();
+ }
+ manager.readLock(owner4, res1);
+ manager.readLock(owner4, res2);
+ manager.upgradeLock(owner4, res3);
+ manager.writeLock(owner4, res3);
+ } catch (LockException ie) {
+ } finally {
+ manager.releaseAll(owner4);
+ synchronized (restart) {
+ restart.meet();
+ restart.reset();
+ }
+ }
+ } catch (InterruptedException ie) {
+ }
+ }
+ }, "Thread #4");
+ t4.start();
+
+ try {
+ try {
+ synchronized (start) {
+ start.meet();
+ start.reset();
+ }
+ manager.readLock("reader", res1);
+ manager.readLock("reader", res2);
+ manager.readLock("reader", res3);
+
+ } catch (LockException ie) {
+ } finally {
+ manager.releaseAll("reader");
+ try {
+ synchronized (restart) {
+ restart.meet();
+ restart.reset();
+ }
+ } catch (InterruptedException ie) {
+ }
+ }
+ } catch (InterruptedException ie) {
+ }
+ }
+
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]