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();
}