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 2012/11/15 08:21:00 UTC

svn commit: r1409671 - in /river/jtsk/trunk/qa/src/com/sun/jini: qa/harness/AdminManager.java test/share/BaseQATest.java

Author: peter_firmstone
Date: Thu Nov 15 07:20:59 2012
New Revision: 1409671

URL: http://svn.apache.org/viewvc?rev=1409671&view=rev
Log:
Fix up some synchronization issues, more logging output to assist debugging.

Modified:
    river/jtsk/trunk/qa/src/com/sun/jini/qa/harness/AdminManager.java
    river/jtsk/trunk/qa/src/com/sun/jini/test/share/BaseQATest.java

Modified: river/jtsk/trunk/qa/src/com/sun/jini/qa/harness/AdminManager.java
URL: http://svn.apache.org/viewvc/river/jtsk/trunk/qa/src/com/sun/jini/qa/harness/AdminManager.java?rev=1409671&r1=1409670&r2=1409671&view=diff
==============================================================================
--- river/jtsk/trunk/qa/src/com/sun/jini/qa/harness/AdminManager.java (original)
+++ river/jtsk/trunk/qa/src/com/sun/jini/qa/harness/AdminManager.java Thu Nov 15 07:20:59 2012
@@ -26,6 +26,9 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -118,19 +121,19 @@ public class AdminManager {
 	Logger.getLogger("com.sun.jini.qa.harness");
 
     /** A mapping of service name prefixes to their index counters. */    
-    private HashMap serviceCounters  = new HashMap();
+    private final Map serviceCounters  = new HashMap();
     
     /** The set of admins to be managed by this manager. */
-    private HashSet createdAdminSet   = new HashSet();
+    private final Set createdAdminSet   = new HashSet();
     
     /** The <code>QAConfig</code> object */
-    private QAConfig config;
+    private final QAConfig config;
 
     /** the admin for the shared group managed by this class. */
-    private SharedGroupAdmin sharedGroupAdmin;
+    private volatile SharedGroupAdmin sharedGroupAdmin = null;
 
     /** The admin for the shared non-activatable group */
-    private NonActivatableGroupAdmin nonActivatableGroupAdmin;
+    private volatile NonActivatableGroupAdmin nonActivatableGroupAdmin = null;
     
     /**
      * Construct an <code>AdminManager</code>. 
@@ -323,7 +326,9 @@ public class AdminManager {
 				  + "serviceName '" 
 				  +  serviceName + "'");
 	}
-	createdAdminSet.add(admin);
+        synchronized (createdAdminSet){
+            createdAdminSet.add(admin);
+        }
 	return admin;
     }
 
@@ -398,15 +403,17 @@ public class AdminManager {
      *         admin cannot be found.
      */
     public Admin getAdmin(Object proxy) {
-	Iterator it = createdAdminSet.iterator();
-	while (it.hasNext()) {
-	    Admin ad = (Admin) it.next();
-	    Object p = ad.getProxy();
-	    if (p != null && p.equals(proxy)) {
-		return ad;
-	    }
-	}
-	return null;
+        synchronized (createdAdminSet){
+            Iterator it = createdAdminSet.iterator();
+            while (it.hasNext()) {
+                Admin ad = (Admin) it.next();
+                Object p = ad.getProxy();
+                if (p != null && p.equals(proxy)) {
+                    return ad;
+                }
+            }
+            return null;
+        }
     }
 
     /**
@@ -834,27 +841,29 @@ public class AdminManager {
 	ArrayList nonActList = new ArrayList();
 	ArrayList actSystemList = new ArrayList();
 	ArrayList classServerList = new ArrayList();
-	Iterator it = createdAdminSet.iterator();
-	while (it.hasNext()) {
-	    Admin admin = (Admin) it.next();
-	    if (admin.getProxy() == null) {  // never started
-		it.remove(); // must use iterator's remove method
-		continue;
-	    }
-	    if (admin.getProxy() instanceof ServiceRegistrar) {
-		lusList.add(admin);
-	    } else if (admin instanceof SharedGroupAdmin) {
-		sharedList.add(admin);
-	    } else if (admin instanceof NonActivatableGroupAdmin) {
-		nonActList.add(admin);
-	    } else if (admin instanceof ActivationSystemAdmin) {
-		actSystemList.add(admin);
-	    } else if (admin instanceof ClassServerAdmin) {
-		classServerList.add(admin);
-	    } else {
-		svcList.add(admin);
-	    }
-	}
+        synchronized (createdAdminSet){
+            Iterator it = createdAdminSet.iterator();
+            while (it.hasNext()) {
+                Admin admin = (Admin) it.next();
+                if (admin.getProxy() == null) {  // never started
+                    it.remove(); // must use iterator's remove method
+                    continue;
+                }
+                if (admin.getProxy() instanceof ServiceRegistrar) {
+                    lusList.add(admin);
+                } else if (admin instanceof SharedGroupAdmin) {
+                    sharedList.add(admin);
+                } else if (admin instanceof NonActivatableGroupAdmin) {
+                    nonActList.add(admin);
+                } else if (admin instanceof ActivationSystemAdmin) {
+                    actSystemList.add(admin);
+                } else if (admin instanceof ClassServerAdmin) {
+                    classServerList.add(admin);
+                } else {
+                    svcList.add(admin);
+                }
+            }
+        }
 	ArrayList[] lists = new ArrayList[] {svcList, 
 					     lusList, 
 					     sharedList,
@@ -862,8 +871,8 @@ public class AdminManager {
 					     actSystemList,
 					     classServerList};
 	for (int i = 0; i < lists.length; i++) {
-	    ArrayList list = lists[i];
-	    it = list.iterator();
+	    List list = lists[i];
+	    Iterator it = list.iterator();
 	    /* Step through the iterator destroying each service */
 	    while(it.hasNext()) {
 		Admin admin = (Admin) it.next();
@@ -905,47 +914,49 @@ public class AdminManager {
 	if (service == null) {
 	    return true;
 	}
-	Iterator it = createdAdminSet.iterator();
-        while(it.hasNext()) {
-	    Admin admin = (Admin) it.next();
-	    if (admin == null) {
-		continue;
-	    }
-	    Object proxy = admin.getProxy();
-	    // proxy will be null if the service  wasn't started
-	    if (proxy == null || (! proxy.equals(service))) {
-		continue;
-	    }
-	    try {
-		logger.log(Level.FINE, 
-			   "destroying service: " + proxy.getClass());
-		if (admin instanceof ActivatableServiceStarterAdmin) {
-		    ActivatableServiceStarterAdmin 
-			    ssa = (ActivatableServiceStarterAdmin) admin;
-		    int destroyCode = ssa.stopAndWait(nSecsWait);
-		    if(nSecsWait <= 0) {//doesn't care if act group still there
-			destroyCode = ServiceDestroyer.DESTROY_SUCCESS;
-		    }
-		    handleDestroyCode(destroyCode);
-		    return destroyCode == ServiceDestroyer.DESTROY_SUCCESS ;
-		} else {
-		    admin.stop();
-		}
-		if (admin == sharedGroupAdmin) {
-		    sharedGroupAdmin = null;
-		}
-		if (admin == nonActivatableGroupAdmin) {
-		    nonActivatableGroupAdmin = null;
-		}
-		return true;
-	    } catch(RemoteException e) { 
-                logger.log(Level.FINE, "RemoteException stopping service", e);
-	    } catch(ActivationException e) {
-                logger.log(Level.FINE, "ActivationException stopping service:", e);
+        synchronized (createdAdminSet){
+            Iterator it = createdAdminSet.iterator();
+            while(it.hasNext()) {
+                Admin admin = (Admin) it.next();
+                if (admin == null) {
+                    continue;
+                }
+                Object proxy = admin.getProxy();
+                // proxy will be null if the service  wasn't started
+                if (proxy == null || (! proxy.equals(service))) {
+                    continue;
+                }
+                try {
+                    logger.log(Level.FINE, 
+                               "destroying service: " + proxy.getClass());
+                    if (admin instanceof ActivatableServiceStarterAdmin) {
+                        ActivatableServiceStarterAdmin 
+                                ssa = (ActivatableServiceStarterAdmin) admin;
+                        int destroyCode = ssa.stopAndWait(nSecsWait);
+                        if(nSecsWait <= 0) {//doesn't care if act group still there
+                            destroyCode = ServiceDestroyer.DESTROY_SUCCESS;
+                        }
+                        handleDestroyCode(destroyCode);
+                        return destroyCode == ServiceDestroyer.DESTROY_SUCCESS ;
+                    } else {
+                        admin.stop();
+                    }
+                    if (admin == sharedGroupAdmin) {
+                        sharedGroupAdmin = null;
+                    }
+                    if (admin == nonActivatableGroupAdmin) {
+                        nonActivatableGroupAdmin = null;
+                    }
+                    return true;
+                } catch(RemoteException e) { 
+                    logger.log(Level.FINE, "RemoteException stopping service", e);
+                } catch(ActivationException e) {
+                    logger.log(Level.FINE, "ActivationException stopping service:", e);
+                }
+                finally {
+                    it.remove(); // must use iterator's remove
+                }
             }
-	    finally {
-		it.remove(); // must use iterator's remove
-	    }
         }
         return false;
     }
@@ -1024,7 +1035,11 @@ public class AdminManager {
      * @return the <code>Iterator</code>
      */
     Iterator iterator() {
-	return createdAdminSet.iterator();
+        Set set = new HashSet();
+        synchronized (createdAdminSet){
+            set.addAll(createdAdminSet);
+        }
+	return set.iterator();
     }
 
     /**
@@ -1066,8 +1081,10 @@ public class AdminManager {
     }
 
     public AbstractServiceAdmin[] getAllAdmins() {
-	AbstractServiceAdmin[] admins = 
-	    new AbstractServiceAdmin[createdAdminSet.size()];
-	return (AbstractServiceAdmin[]) createdAdminSet.toArray(admins);
+        synchronized (createdAdminSet){
+            AbstractServiceAdmin[] admins = 
+                new AbstractServiceAdmin[createdAdminSet.size()];
+            return (AbstractServiceAdmin[]) createdAdminSet.toArray(admins);
+        }
     }
 }

Modified: river/jtsk/trunk/qa/src/com/sun/jini/test/share/BaseQATest.java
URL: http://svn.apache.org/viewvc/river/jtsk/trunk/qa/src/com/sun/jini/test/share/BaseQATest.java?rev=1409671&r1=1409670&r2=1409671&view=diff
==============================================================================
--- river/jtsk/trunk/qa/src/com/sun/jini/test/share/BaseQATest.java (original)
+++ river/jtsk/trunk/qa/src/com/sun/jini/test/share/BaseQATest.java Thu Nov 15 07:20:59 2012
@@ -1438,7 +1438,10 @@ abstract public class BaseQATest extends
         for(int i=0;i<lookupsStarted.size();i++) {
             LocatorGroupsPair pair = (LocatorGroupsPair)lookupsStarted.get(i);
             int curPort = (pair.locator).getPort();
-            if(port == curPort) return true;
+            if(port == curPort) {
+                logger.log(Level.FINE, "port in use: " + port);
+                return true;
+            }
         }//end loop
         return false;
     }//end portInUse
@@ -1569,8 +1572,9 @@ abstract public class BaseQATest extends
                                = (LocatorGroupsPair)addLookupsToStart.get(j);
                 int port = (pair.locator).getPort();
                 if(portInUse(port)) port = 0;
-                String hostname = startLookup(i,port, pair.locator.getHost());
+                startLookup(i,port, pair.locator.getHost());
                 if(port == 0) {
+                    logger.log(Level.FINEST, "port was equal to zero");
                     Object locGroupsPair = lookupsStarted.get(i);
                     addLookupsToStart.set(j,locGroupsPair);
                     allLookupsToStart.set(i,locGroupsPair);
@@ -1614,6 +1618,7 @@ abstract public class BaseQATest extends
 
     protected String startLookup(int indx, int port, String serviceHost) throws Exception {
         logger.log(Level.FINE, " starting lookup service "+indx);
+        logger.log(Level.FINEST, serviceHost + ":"+ port);
         /* retrieve the member groups with which to configure the lookup */
         String[] memberGroups = (String[])memberGroupsList.get(indx);
         ServiceRegistrar lookupProxy = null;