[jboss-svn-commits] JBL Code SVN: r27950 - in labs/jbosstm/trunk/ArjunaCore/arjuna: classes/com/arjuna/ats/internal/arjuna/recovery and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Jul 13 07:45:30 EDT 2009
Author: adinn
Date: 2009-07-13 07:45:30 -0400 (Mon, 13 Jul 2009)
New Revision: 27950
Added:
labs/jbosstm/trunk/ArjunaCore/arjuna/tests/byteman-scripts/recovery.txt
Modified:
labs/jbosstm/trunk/ArjunaCore/arjuna/build.xml
labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/PeriodicRecovery.java
labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/recovery/RecoveryManagerStartStopTest.java
Log:
RecoveryManagerStartStopTest now uses byteman to make sure the listener thread is ready to accept socket requests before starting the clients and synchronises on startup of client threads before shutting down the listener -- fixes for JBTM-576
Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/build.xml
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/build.xml 2009-07-13 11:40:16 UTC (rev 27949)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/build.xml 2009-07-13 11:45:30 UTC (rev 27950)
@@ -60,6 +60,7 @@
<exclude name="**/reaper/ReaperMonitorTest.java"/>
<exclude name="**/objectstore/LogStoreRecoveryTest.java"/>
<exclude name="**/objectstore/LogStoreTest2.java"/>
+ <exclude name="**/recovery/RecoveryManagerStartStopTest.java"/>
</fileset>
</tests>
</run.tests.macro>
@@ -88,6 +89,11 @@
</fileset>
</tests>
</run.tests.macro>
+ <run.tests.macro script="recovery.txt">
+ <tests>
+ <fileset dir="tests/classes" includes="**/RecoveryManagerStartStopTest.java"/>
+ </tests>
+ </run.tests.macro>
</target>
</project>
Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/PeriodicRecovery.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/PeriodicRecovery.java 2009-07-13 11:40:16 UTC (rev 27949)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/PeriodicRecovery.java 2009-07-13 11:45:30 UTC (rev 27950)
@@ -628,7 +628,15 @@
return new Vector(_recoveryModules);
}
}
+ /*
+ * debugging aid
+ */
+ public Listener getListener()
+ {
+ return _listener;
+ }
+
/***** private implementation *****/
/**
Copied: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/byteman-scripts/recovery.txt (from rev 27943, labs/jbosstm/trunk/ArjunaCore/arjuna/tests/byteman-scripts/reaper.txt)
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/byteman-scripts/recovery.txt (rev 0)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/byteman-scripts/recovery.txt 2009-07-13 11:45:30 UTC (rev 27950)
@@ -0,0 +1,64 @@
+########################################################################
+#
+# byteman script used to ensure that tests can synchronize with various
+# actions performed by the recovery code
+
+#########################################################################
+# rules to identify progress of the periodic recovery listener thread
+#
+
+# if a test has set up a rendezvous under key "PR listener run" then
+# flag the listener so that it enters the rendezvous when it starts runnning
+
+RULE periodic recovery set up listener for rendezvous
+CLASS com.arjuna.ats.internal.arjuna.recovery.PeriodicRecovery
+METHOD <init>
+AT CALL Listener.start
+BIND pr : PeriodicRecovery = $0
+IF isRendezvous("PR listener run", 2)
+DO debug("flagging PR listener"),
+ flag(pr.getListener())
+ENDRULE
+
+# if the listener has been flagged then make it enter
+# the PR run rendezvous just before calling accept
+
+RULE listener rendezvous at run
+CLASS com.arjuna.ats.internal.arjuna.recovery.Listener
+METHOD run()
+AT ENTRY
+BIND listener : Listener = $0
+IF flagged(listener) && isRendezvous("PR listener run", 2)
+DO debug("listener rendezvous at PR listener run"),
+ rendezvous("PR listener run")
+ENDRULE
+
+#########################################################################
+#
+# rules appropriate to specific tests
+
+#########################################################################
+# RecoveryManagerStartStopTest wants to rendezvous at the point where
+# the periodic recovery worker service has started running
+#
+
+RULE RecoveryManagerStartStopTest create rendezvous
+CLASS com.hp.mwtests.ts.arjuna.recovery.RecoveryManagerStartStopTest
+METHOD testStartStop()
+AT ENTRY
+BIND NOTHING
+IF TRUE
+DO debug("create rendezvous for PR listener run"),
+ createRendezvous("PR listener run", 2)
+ENDRULE
+
+RULE RecoveryManagerStartStopTest rendezvous before adding clients
+CLASS com.hp.mwtests.ts.arjuna.recovery.RecoveryManagerStartStopTest
+METHOD testStartStop()
+AT CALL addRecoveryClient
+BIND NOTHING
+IF TRUE
+DO debug("RecoveryManagerStartStopTest rendezvous at PR listener run"),
+ rendezvous("PR listener run")
+ENDRULE
+
Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/recovery/RecoveryManagerStartStopTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/recovery/RecoveryManagerStartStopTest.java 2009-07-13 11:40:16 UTC (rev 27949)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/recovery/RecoveryManagerStartStopTest.java 2009-07-13 11:45:30 UTC (rev 27950)
@@ -59,24 +59,20 @@
manager.initialize();
- // give threads a chance to start
-
- Thread.sleep(2000);
-
dumpThreadGroup(thg, "Before recovery manager start periodic recovery thread");
manager.startRecoveryManagerThread();
dumpThreadGroup(thg, "Before recovery manager client create");
+ // Thread.sleep(1000);
+
// we need to open several connections to the recovery manager listener service and then
// ensure they get closed down
addRecoveryClient();
addRecoveryClient();
- Thread.sleep(5000);
-
dumpThreadGroup(thg, "Before recovery manager terminate");
manager.terminate();
@@ -85,10 +81,6 @@
ensureRecoveryClientsTerminated();
- // ensure there are no extra threads running
-
- Thread.sleep(2000);
-
dumpThreadGroup(thg, "After recovery manager terminate");
int newActiveCount = thg.activeCount();
@@ -118,6 +110,7 @@
RecoveryManagerStartStopTestThread client = new RecoveryManagerStartStopTestThread();
clients.add(client);
client.start();
+ client.ensureStarted();
}
private void dumpThreadGroup(ThreadGroup thg, String header)
@@ -140,6 +133,8 @@
private static class RecoveryManagerStartStopTestThread extends Thread
{
private boolean failed = true;
+ private boolean started = false;
+ private boolean stopped = false;
public RecoveryManagerStartStopTestThread()
{
@@ -186,11 +181,14 @@
fromServer = new BufferedReader(new InputStreamReader(connectorSocket.getInputStream()));
} catch (Exception e) {
+
System.out.println("Failed to set up listener input stream!!!");
e.printStackTrace();
System.out.flush();
return;
+ } finally {
+ notifyStarted();
}
try {
@@ -221,5 +219,21 @@
System.out.flush();
}
}
+
+ public synchronized void notifyStarted()
+ {
+ started = true;
+ notify();
+ }
+
+ public synchronized void ensureStarted() {
+ while (!started) {
+ try {
+ wait();
+ } catch (InterruptedException e) {
+ // ignore
+ }
+ }
+ }
}
}
More information about the jboss-svn-commits
mailing list