You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@river.apache.org by pe...@apache.org on 2013/12/22 06:09:18 UTC
svn commit: r1552964 - in /river/jtsk/skunk/qa_refactor/trunk:
qa/src/com/sun/jini/test/impl/thread/
qa/src/com/sun/jini/test/spec/discoveryservice/lease/
src/com/sun/jini/fiddler/ src/org/apache/river/api/net/
Author: peter_firmstone
Date: Sun Dec 22 05:09:18 2013
New Revision: 1552964
URL: http://svn.apache.org/r1552964
Log:
Fix LeaseExpiration test synchronization
Fix FiddlerImpl thread initialization
Fix race condition in WakeupManagerTaskExceptionTest after test failure was experienced.
Change logging in RFC3986URLClassLoader for parallel class loading to INFO.
Modified:
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/thread/WakeupManagerTaskExceptionTest.java
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/spec/discoveryservice/lease/LeaseExpiration.java
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/fiddler/FiddlerImpl.java
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/fiddler/FiddlerInit.java
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/net/RFC3986URLClassLoader.java
Modified: river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/thread/WakeupManagerTaskExceptionTest.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/thread/WakeupManagerTaskExceptionTest.java?rev=1552964&r1=1552963&r2=1552964&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/thread/WakeupManagerTaskExceptionTest.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/thread/WakeupManagerTaskExceptionTest.java Sun Dec 22 05:09:18 2013
@@ -46,15 +46,20 @@ public class WakeupManagerTaskExceptionT
final boolean result[] = new boolean[]{false};
manager.schedule(goodTaskTime, new Runnable() {
public void run() {
- result[0] = true;
+ // This happens in another thread
+ synchronized (result){
+ result[0] = true;
+ }
}
});
while (System.currentTimeMillis() < goodTaskTime + 10) {
Thread.sleep((goodTaskTime+10)-System.currentTimeMillis());
}
- if (!result[0]) {
- throw new TestException("A task that throws a runtime exception"
- + " prevents other tasks from running");
+ synchronized (result){
+ if (!result[0]) {
+ throw new TestException("A task that throws a runtime exception"
+ + " prevents other tasks from running");
+ }
}
}
}
Modified: river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/spec/discoveryservice/lease/LeaseExpiration.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/spec/discoveryservice/lease/LeaseExpiration.java?rev=1552964&r1=1552963&r2=1552964&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/spec/discoveryservice/lease/LeaseExpiration.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/spec/discoveryservice/lease/LeaseExpiration.java Sun Dec 22 05:09:18 2013
@@ -155,6 +155,7 @@ public class LeaseExpiration extends Abs
}
synchronized(eventLock) {
eventReceived = true;
+ eventLock.notifyAll();
}
}
}//end class ServiceEventListener
@@ -190,7 +191,7 @@ public class LeaseExpiration extends Abs
private static final long N_SECS = 30;
private final long duration = N_SECS*1000;
private MarshalledObject handback = null;
- private volatile boolean eventReceived = false;
+ private boolean eventReceived = false;
private final Object eventLock = new Object();
/** Constructs and returns the duration values (in milliseconds) to
@@ -301,24 +302,32 @@ public class LeaseExpiration extends Abs
long nSecsWait = ( (nSecsLookupDiscovery > (actualDur/1000)) ?
nSecsLookupDiscovery : (actualDur/1000) );
/* Give the event time to arrive */
- int i = 0;
- if(!eventReceived) {
- for(i=1;i<nSecsWait;i++) {
- DiscoveryServiceUtil.delayMS(1000);
- if(eventReceived) break;
- }
- }//endif
- if(eventReceived) {
- logger.log(Level.FINE,
- "first discovery event received after "
- +i+" second(s)");
- } else {
- throw new TestException(
- " -- waited "+i+" seconds, but no discovery "
- +"event received for the first lookup "
- +"service started");
- }//endif
-
+ long startTime = System.currentTimeMillis();
+ long finishWait = nSecsWait * 1000;
+ long waitDuration = 0L;
+ synchronized (eventLock){
+ if(!eventReceived) {
+ while (waitDuration < finishWait) {
+ try {
+ eventLock.wait(1000);
+ waitDuration = System.currentTimeMillis() - startTime;
+ if(eventReceived) break;
+ } catch (InterruptedException e){
+ Thread.currentThread().interrupt();// restore
+ }
+ }
+ }//endif
+ if(eventReceived) {
+ logger.log(Level.FINE,
+ "first discovery event received after "
+ +waitDuration/1000+" second(s)");
+ } else {
+ throw new TestException(
+ " -- waited "+waitDuration/1000+" seconds, but no discovery "
+ +"event received for the first lookup "
+ +"service started");
+ }//endif
+ }
/* Start another lookup belonging to same group(s) as first */
logger.log(Level.FINE,
"starting a new lookup service");
@@ -338,22 +347,29 @@ public class LeaseExpiration extends Abs
" lookup MemberGroup(s) = "
+GroupsUtil.toCommaSeparatedStr(memberGroups1));
/* Give the event time to arrive */
- i = 0;
- if(!eventReceived) {
- for(i=1;i<nSecsWait;i++) {
- DiscoveryServiceUtil.delayMS(1000);
- if(eventReceived) break;
- }
- }//endif
- if(eventReceived) {
- logger.log(Level.FINE,
- "second discovery event received after "+i+" second(s)");
- } else {
- throw new TestException(
- " -- waited "+i+" seconds, but no discovery "
- +"event received for the second lookup "
- +"service started");
- }//endif
+ startTime = System.currentTimeMillis();
+ synchronized (eventLock){
+ if(!eventReceived) {
+ while (waitDuration < finishWait) {
+ try {
+ eventLock.wait(1000);
+ waitDuration = System.currentTimeMillis() - startTime;
+ if(eventReceived) break;
+ } catch (InterruptedException e){
+ Thread.currentThread().interrupt();// restore
+ }
+ }
+ }//endif
+ if(eventReceived) {
+ logger.log(Level.FINE,
+ "second discovery event received after "+waitDuration/1000+" second(s)");
+ } else {
+ throw new TestException(
+ " -- waited "+waitDuration/1000+" seconds, but no discovery "
+ +"event received for the second lookup "
+ +"service started");
+ }//endif
+ }
/* Remove the lease from the renewal manager so it can expire */
try {
lrm.remove(lease);
@@ -369,7 +385,7 @@ public class LeaseExpiration extends Abs
logger.log(Level.FINE,
"waiting for lease expiration ...");
boolean leaseExpired = false;
- for(i=0;i<N_CYCLES_WAIT_EXPIRATION;i++) {
+ for(int i=0;i<N_CYCLES_WAIT_EXPIRATION;i++) {
DiscoveryServiceUtil.delayMS(2*actualDur);
/* Verify the lease has expired by trying to renew the lease */
try {
@@ -409,22 +425,29 @@ public class LeaseExpiration extends Abs
" lookup MemberGroup(s) = "
+GroupsUtil.toCommaSeparatedStr(memberGroups2));
/* Give the event time to arrive */
- i = 0;
- if(!eventReceived) {
- for(i=1;i<nSecsWait;i++) {
- DiscoveryServiceUtil.delayMS(1000);
- if(eventReceived) break;
- }
- }//endif
- if(eventReceived) {
- throw new TestException(
- " -- last discovery event received after "
- +i+" second(s)");
- } else {
- logger.log(Level.FINE,
- "no events received after "+i+" second(s)");
+ startTime = System.currentTimeMillis();
+ synchronized (eventLock){
+ if(!eventReceived) {
+ while (waitDuration < finishWait) {
+ try {
+ eventLock.wait(1000);
+ waitDuration = System.currentTimeMillis() - startTime;
+ if (eventReceived) break;
+ } catch (InterruptedException e){
+ Thread.currentThread().interrupt();// restore
+ }
+ }
+ }//endif
+ if(eventReceived) {
+ throw new TestException(
+ " -- last discovery event received after "
+ +waitDuration/1000+" second(s)");
+ } else {
+ logger.log(Level.FINE,
+ "no events received after "+waitDuration/1000+" second(s)");
- }//endif
+ }//endif
+ }
}//end run
} //end class LeaseExpiration
Modified: river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/fiddler/FiddlerImpl.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/fiddler/FiddlerImpl.java?rev=1552964&r1=1552963&r2=1552964&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/fiddler/FiddlerImpl.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/fiddler/FiddlerImpl.java Sun Dec 22 05:09:18 2013
@@ -115,6 +115,7 @@ import java.rmi.RemoteException;
import java.rmi.server.ExportException;
import java.security.AccessControlContext;
import java.security.AccessController;
+import java.security.PrivilegedAction;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
@@ -499,8 +500,6 @@ class FiddlerImpl implements ServerProxy
taskMgr = i.taskMgr;
activationSystem = i.activationSystem;
serverExporter = i.serverExporter;
- leaseExpireThread = i.leaseExpireThread;
- snapshotThread = i.snapshotThread;
logHandler = i.logHandler;
activationID = i.activationID;
// These three fields are used by the Starter.start() implementation.
@@ -508,6 +507,26 @@ class FiddlerImpl implements ServerProxy
config = i.config;
context = i.context;
loginContext = i.loginContext;
+ leaseExpireThread = AccessController.doPrivileged(
+ new PrivilegedAction<LeaseExpireThread>(){
+ @Override
+ public LeaseExpireThread run() {
+ return new LeaseExpireThread(FiddlerImpl.this);
+ }
+
+ }, context);
+ if (log != null){
+ snapshotThread = AccessController.doPrivileged(
+ new PrivilegedAction<SnapshotThread>(){
+ @Override
+ public SnapshotThread run() {
+ return new SnapshotThread(FiddlerImpl.this);
+ }
+
+ }, context);
+ } else {
+ snapshotThread = null;
+ }
}
/* ************************** END Constructors ************************* */
@@ -575,7 +594,7 @@ class FiddlerImpl implements ServerProxy
* currently discovered lookup service(s).
* @serial
*/
- public HashMap discoveredRegsMap;
+ public final HashMap discoveredRegsMap;
/** The managed set containing the names of the groups whose
* members are the lookup services the lookup discovery service
* should attempt to discover for the current registration.
@@ -2262,24 +2281,15 @@ class FiddlerImpl implements ServerProxy
*/
static class LeaseExpireThread extends InterruptedStatusThread {
- private FiddlerImpl fiddler;
+ private final FiddlerImpl fiddler;
/** Create a daemon thread */
public LeaseExpireThread(FiddlerImpl fiddler) {
super("lease expire");
setDaemon(true);
this.fiddler = fiddler;
}//end constructor
-
- /**
- * This can only be called prior to the thread starting, otherwise it
- * blocks until the thread finishes executing.
- * @param fiddler
- */
- synchronized void setFiddler(FiddlerImpl fiddler){
- this.fiddler = fiddler;
- }
- public synchronized void run() {
+ public void run() {
try {
fiddler.concurrentObj.writeLock();
} catch (ConcurrentLockException e) {
@@ -2402,25 +2412,16 @@ class FiddlerImpl implements ServerProxy
* be treated as a reader process.
*/
static class SnapshotThread extends InterruptedStatusThread {
- private FiddlerImpl fiddler;
+ private final FiddlerImpl fiddler;
/** Create a daemon thread */
- public SnapshotThread() {
+ public SnapshotThread(FiddlerImpl fiddler) {
super("snapshot thread");
setDaemon(true);
- }
-
- /**
- * Due to synchronization this can only be set prior to this thread
- * starting.
- *
- * @param fiddler
- */
- synchronized void setFiddler(FiddlerImpl fiddler){
this.fiddler = fiddler;
}
- public synchronized void run() {
+ public void run() {
try {
fiddler.concurrentObj.readLock();
} catch (ConcurrentLockException e) {
@@ -5337,7 +5338,6 @@ class FiddlerImpl implements ServerProxy
/* start up all the daemon threads */
leaseExpireThread.start();
if(log != null) {
- snapshotThread.setFiddler(FiddlerImpl.this);
snapshotThread.start();
}
logInfoStartup();
Modified: river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/fiddler/FiddlerInit.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/fiddler/FiddlerInit.java?rev=1552964&r1=1552963&r2=1552964&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/fiddler/FiddlerInit.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/fiddler/FiddlerInit.java Sun Dec 22 05:09:18 2013
@@ -73,8 +73,6 @@ class FiddlerInit {
TaskManager taskMgr;
ActivationSystem activationSystem;
Exporter serverExporter;
- LeaseExpireThread leaseExpireThread;
- SnapshotThread snapshotThread;
LocalLogHandler logHandler;
ActivationID activationID = null;
// These three fields are used by the Starter.start() implementation.
@@ -281,13 +279,6 @@ class FiddlerInit {
+"retrieving service's exporter",
e);
}
-
- /* Create the following threads here, after a possible JAAS login,
- * rather than in the constructor, before the login. This must
- * be done so that the threads will have the correct subject.
- */
- leaseExpireThread = new FiddlerImpl.LeaseExpireThread(null);
- if(log != null) snapshotThread = new FiddlerImpl.SnapshotThread();
} catch(Throwable e) {
cleanupInitFailure();
handleActivatableInitThrowable(e);
Modified: river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/net/RFC3986URLClassLoader.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/net/RFC3986URLClassLoader.java?rev=1552964&r1=1552963&r2=1552964&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/net/RFC3986URLClassLoader.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/net/RFC3986URLClassLoader.java Sun Dec 22 05:09:18 2013
@@ -122,11 +122,11 @@ public class RFC3986URLClassLoader exten
} catch (SecurityException ex) {
logger.log(Level.INFO, "Insufficient permission to enable parallel class loading, disabled", ex);
} catch (IllegalAccessException ex) {
- logger.log(Level.SEVERE, "Unable to invoke parallel class loading", ex);
+ logger.log(Level.INFO, "Unable to invoke parallel class loading", ex);
} catch (IllegalArgumentException ex) {
- logger.log(Level.SEVERE, "Unable to invoke parallel class loading", ex);
+ logger.log(Level.INFO, "Unable to invoke parallel class loading", ex);
} catch (InvocationTargetException ex) {
- logger.log(Level.SEVERE, "Unable to invoke parallel class loading", ex);
+ logger.log(Level.INFO, "Unable to invoke parallel class loading", ex);
}
String codebaseAnnotationProperty = null;
String prop = AccessController.doPrivileged(