You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pd...@apache.org on 2017/02/03 21:00:40 UTC

svn commit: r1781598 - in /felix/trunk/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api: AspectRaceTest.java FELIX5471_CyclicDependencyTest.java ServiceRaceTest.java

Author: pderop
Date: Fri Feb  3 21:00:40 2017
New Revision: 1781598

URL: http://svn.apache.org/viewvc?rev=1781598&view=rev
Log:
Test improvement: make sure there is no more threadpool activities before finishing a test iteration. 

Modified:
    felix/trunk/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/AspectRaceTest.java
    felix/trunk/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/FELIX5471_CyclicDependencyTest.java
    felix/trunk/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/ServiceRaceTest.java

Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/AspectRaceTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/AspectRaceTest.java?rev=1781598&r1=1781597&r2=1781598&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/AspectRaceTest.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/AspectRaceTest.java Fri Feb  3 21:00:40 2017
@@ -23,6 +23,7 @@ import java.util.Hashtable;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ForkJoinPool;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -49,7 +50,6 @@ public class AspectRaceTest extends Test
     final static int ASPECTS_PER_SERVICE = 10;
     final static int ITERATIONS = 1000;
     final AtomicInteger m_IDGenerator = new AtomicInteger();
-    ExecutorService m_threadpool;
 
     public void testConcurrentAspects() {
         try {
@@ -87,6 +87,8 @@ public class AspectRaceTest extends Test
                 if (!tracker.awaitStopped(5000)) {
                     throw new IllegalStateException("Could not stop components timely.");
                 }
+                
+                m_threadPool.awaitQuiescence(5000, TimeUnit.MILLISECONDS);
 
                 if ((loop) % 50 == 0) {
                     warn("Performed " + loop + " tests.");
@@ -111,15 +113,15 @@ public class AspectRaceTest extends Test
         // Create a threadpool only if setParallel() method has not been called.
         if (! m_parallel) {
             int cores = Math.max(16, Runtime.getRuntime().availableProcessors());
-            m_threadpool = Executors.newFixedThreadPool(cores);
+            m_threadPool = new ForkJoinPool(cores);
         }
     }
     
     void shutdownThreadPool() {
-        if (! m_parallel && m_threadpool != null) {
-            m_threadpool.shutdown();
+        if (! m_parallel && m_threadPool != null) {
+            m_threadPool.shutdown();
             try {
-                m_threadpool.awaitTermination(60, TimeUnit.SECONDS);
+                m_threadPool.awaitTermination(60, TimeUnit.SECONDS);
             } catch (InterruptedException e) {
             }
         }
@@ -248,19 +250,19 @@ public class AspectRaceTest extends Test
                 }
             } else {
                 for (final Component s : m_services) {
-                    m_threadpool.execute(new Runnable() {
+                    m_threadPool.execute(new Runnable() {
                         public void run() {
                             m_dm.add(s);
                         }
                     });
                 }
-                m_threadpool.execute(new Runnable() {
+                m_threadPool.execute(new Runnable() {
                     public void run() {
                         m_dm.add(m_controller);
                     }
                 });
                 for (final Component a : m_aspects) {
-                    m_threadpool.execute(new Runnable() {
+                    m_threadPool.execute(new Runnable() {
                         public void run() {
                             m_dm.add(a);
                         }

Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/FELIX5471_CyclicDependencyTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/FELIX5471_CyclicDependencyTest.java?rev=1781598&r1=1781597&r2=1781598&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/FELIX5471_CyclicDependencyTest.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/FELIX5471_CyclicDependencyTest.java Fri Feb  3 21:00:40 2017
@@ -18,8 +18,8 @@
  */
 package org.apache.felix.dm.itest.api;
 
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
+import java.util.concurrent.ForkJoinPool;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.felix.dm.Component;
 import org.apache.felix.dm.ComponentState;
@@ -37,10 +37,10 @@ public class FELIX5471_CyclicDependencyT
 
 	public void testCyclicDependency() throws InterruptedException {
 		DependencyManager m = getDM();
-		ExecutorService tpool = Executors.newFixedThreadPool(2);
+		ForkJoinPool tpool = new ForkJoinPool(2);
 		try {
 			for (int count = 0; count < 1000; count++) {
-				m_ensure = new Ensure();
+				m_ensure = new Ensure(false);
 
 				Component a = m.createComponent()
 						.setImplementation(new A())
@@ -63,12 +63,14 @@ public class FELIX5471_CyclicDependencyT
 				a.add(l);
 				b.add(l);
 				
-				m_ensure.waitForStep(4, 50000); // A started, B started
+				m_ensure.waitForStep(4, 5000); // A started, B started
 
 				tpool.execute(() -> m.remove(a));
 				tpool.execute(() -> m.remove(b));
 				
-				m_ensure.waitForStep(10, 50000); // A unbound from  B, stopped and inactive, B unbound from A, stopped and inactive
+				m_ensure.waitForStep(10, 5000); // A unbound from  B, stopped and inactive, B unbound from A, stopped and inactive
+				
+				tpool.awaitQuiescence(5000, TimeUnit.MILLISECONDS);				
 			}
 		} finally {
 			tpool.shutdown();

Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/ServiceRaceTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/ServiceRaceTest.java?rev=1781598&r1=1781597&r2=1781598&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/ServiceRaceTest.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/ServiceRaceTest.java Fri Feb  3 21:00:40 2017
@@ -25,6 +25,7 @@ import java.util.Hashtable;
 import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ForkJoinPool;
 import java.util.concurrent.TimeUnit;
 
 import org.junit.Assert;
@@ -52,9 +53,6 @@ public class ServiceRaceTest extends Tes
     final static int LOOPS = 3000;
     final Ensure m_done = new Ensure(true);
 
-    // Executor used to bind/unbind service dependencies.
-    ExecutorService m_threadpool;
-    
     // Timestamp used to log the time consumed to execute 100 tests.
     long m_timeStamp;
     
@@ -108,15 +106,15 @@ public class ServiceRaceTest extends Tes
             // We are not using a parallel DM, so we create a custom threadpool in order to add components concurrently.
             int cores = Math.max(16, Runtime.getRuntime().availableProcessors());
             info("using " + cores + " cores.");
-            m_threadpool = Executors.newFixedThreadPool(Math.max(cores, DEPENDENCIES + 3 /* start/stop/configure */));
+            m_threadPool = new ForkJoinPool(Math.max(cores, DEPENDENCIES + 3 /* start/stop/configure */));
         }
     }
 
     void shutdownThreadPool() {
-        if (! m_parallel && m_threadpool != null) {
-            m_threadpool.shutdown();
+        if (! m_parallel && m_threadPool != null) {
+            m_threadPool.shutdown();
             try {
-                m_threadpool.awaitTermination(60, TimeUnit.SECONDS);
+                m_threadPool.awaitTermination(60, TimeUnit.SECONDS);
             } catch (InterruptedException e) {
             }
         }
@@ -228,6 +226,8 @@ public class ServiceRaceTest extends Tes
         stepConfDeleted.waitForStep(1, STEP_WAIT);
         step.ensure();
         Assert.assertEquals(0, clientImpl.getDependencies());
+        
+        m_threadPool.awaitQuiescence(5000, TimeUnit.MILLISECONDS);
 
         if (super.errorsLogged()) {
             throw new IllegalStateException("Race test interrupted (some error occured, see previous logs)");
@@ -244,7 +244,7 @@ public class ServiceRaceTest extends Tes
     private void schedule(Runnable task) {
         if (! m_parallel) {
             // not using parallel DM, so use our custom threadpool.
-            m_threadpool.execute(task);
+            m_threadPool.execute(task);
         } else {
             task.run();
         }