You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2015/10/26 13:22:12 UTC
svn commit: r1710585 - in
/qpid/java/trunk/perftests/src/main/java/org/apache/qpid/disttest:
ClientRunner.java ControllerRunner.java
Author: kwall
Date: Mon Oct 26 12:22:12 2015
New Revision: 1710585
URL: http://svn.apache.org/viewvc?rev=1710585&view=rev
Log:
NO-JIRA: [Perf Test Framework] Join on client (participant) threads to avoid race in clean (prevents sporadic test failure on Jenkins).
Modified:
qpid/java/trunk/perftests/src/main/java/org/apache/qpid/disttest/ClientRunner.java
qpid/java/trunk/perftests/src/main/java/org/apache/qpid/disttest/ControllerRunner.java
Modified: qpid/java/trunk/perftests/src/main/java/org/apache/qpid/disttest/ClientRunner.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/perftests/src/main/java/org/apache/qpid/disttest/ClientRunner.java?rev=1710585&r1=1710584&r2=1710585&view=diff
==============================================================================
--- qpid/java/trunk/perftests/src/main/java/org/apache/qpid/disttest/ClientRunner.java (original)
+++ qpid/java/trunk/perftests/src/main/java/org/apache/qpid/disttest/ClientRunner.java Mon Oct 26 12:22:12 2015
@@ -19,6 +19,9 @@
*/
package org.apache.qpid.disttest;
+import java.util.ArrayList;
+import java.util.Collection;
+
import javax.naming.Context;
import javax.naming.NamingException;
@@ -30,10 +33,11 @@ import org.slf4j.LoggerFactory;
public class ClientRunner extends AbstractRunner
{
private static final Logger LOGGER = LoggerFactory.getLogger(ClientRunner.class);
-
public static final String NUM_OF_CLIENTS_PROP = "number-of-clients";
public static final String NUM_OF_CLIENTS_DEFAULT = "1";
+ private static final int AWAIT_SHUTDOWN_TIMEOUT = 30000;
+ private Collection<Thread> _clientThreads = new ArrayList<>();
public ClientRunner()
{
@@ -67,32 +71,55 @@ public class ClientRunner extends Abstra
for(int i = 1; i <= numClients; i++)
{
- createBackgroundClient(context);
+ Thread clientThread = createBackgroundClient(context);
+ _clientThreads.add(clientThread);
}
}
- private void createBackgroundClient(Context context)
+ private Thread createBackgroundClient(Context context)
{
try
{
final Client client = new Client(new ClientJmsDelegate(context));
- final Thread clientThread = new Thread(new Runnable()
+ Thread clientThread = new Thread(new Runnable()
{
@Override
public void run()
{
- LOGGER.info("Starting client " + client.getClientName());
+ LOGGER.info("Starting client {}", client.getClientName());
client.start();
client.waitUntilStopped();
- LOGGER.info("Stopped client " + client.getClientName());
+ LOGGER.info("Stopped client {}", client.getClientName());
}
});
clientThread.start();
+ return clientThread;
+
}
catch (NamingException e)
{
throw new DistributedTestException("Exception while creating client instance", e);
}
}
+
+ public void awaitShutdown()
+ {
+ for (Thread thread : _clientThreads)
+ {
+ try
+ {
+ thread.join(AWAIT_SHUTDOWN_TIMEOUT);
+ if (thread.isAlive())
+ {
+ LOGGER.warn("Client thread {} failed to shutdown within timeout {} ms",
+ thread, AWAIT_SHUTDOWN_TIMEOUT);
+ }
+ }
+ catch (InterruptedException e)
+ {
+ Thread.currentThread().interrupt();
+ }
+ }
+ }
}
Modified: qpid/java/trunk/perftests/src/main/java/org/apache/qpid/disttest/ControllerRunner.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/perftests/src/main/java/org/apache/qpid/disttest/ControllerRunner.java?rev=1710585&r1=1710584&r2=1710585&view=diff
==============================================================================
--- qpid/java/trunk/perftests/src/main/java/org/apache/qpid/disttest/ControllerRunner.java (original)
+++ qpid/java/trunk/perftests/src/main/java/org/apache/qpid/disttest/ControllerRunner.java Mon Oct 26 12:22:12 2015
@@ -22,6 +22,8 @@ package org.apache.qpid.disttest;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import javax.naming.Context;
@@ -34,7 +36,6 @@ import org.apache.qpid.disttest.db.Resul
import org.apache.qpid.disttest.jms.ControllerJmsDelegate;
import org.apache.qpid.disttest.results.CompositeResultsWriter;
import org.apache.qpid.disttest.results.ResultsCsvWriter;
-import org.apache.qpid.disttest.results.ResultsWriter;
import org.apache.qpid.disttest.results.ResultsXmlWriter;
import org.apache.qpid.disttest.results.aggregation.Aggregator;
import org.slf4j.Logger;
@@ -114,13 +115,19 @@ public class ControllerRunner extends Ab
DistributedTestConstants.REGISTRATION_TIMEOUT,
DistributedTestConstants.COMMAND_RESPONSE_TIMEOUT,
getCliOptions());
+
+ String testConfigPath = getCliOptions().get(ControllerRunner.TEST_CONFIG_PROP);
+ List<String> testConfigFiles = _configFileHelper.getTestConfigFiles(testConfigPath);
+ Collection<ClientRunner> clients = createClientsIfNotDistributed(testConfigFiles);
+
try
{
- runTests(controller);
+ runTests(controller, testConfigFiles);
}
finally
{
controller.stopAllRegisteredClients();
+ awaitClientShutdown(clients);
}
}
finally
@@ -160,12 +167,9 @@ public class ControllerRunner extends Ab
_resultsWriter.end();
}
- private void runTests(Controller controller)
+ private void runTests(Controller controller, List<String> testConfigFiles)
{
boolean testError = false;
- String testConfigPath = getCliOptions().get(ControllerRunner.TEST_CONFIG_PROP);
- List<String> testConfigFiles = _configFileHelper.getTestConfigFiles(testConfigPath);
- createClientsIfNotDistributed(testConfigFiles);
try
{
@@ -212,7 +216,7 @@ public class ControllerRunner extends Ab
return resultsForAllTests;
}
- private void createClientsIfNotDistributed(final List<String> testConfigFiles)
+ private Collection<ClientRunner> createClientsIfNotDistributed(final List<String> testConfigFiles)
{
if(!isDistributed())
{
@@ -225,12 +229,25 @@ public class ControllerRunner extends Ab
}
//we must create the required test clients, running in single-jvm mode
+ Collection<ClientRunner> runners = new ArrayList<>(maxNumberOfClients);
for (int i = 1; i <= maxNumberOfClients; i++)
{
ClientRunner clientRunner = new ClientRunner();
clientRunner.setJndiPropertiesFileLocation(getJndiConfig());
clientRunner.runClients();
+ runners.add(clientRunner);
+
}
+ return runners;
+ }
+ return Collections.emptyList();
+ }
+
+ private void awaitClientShutdown(final Collection<ClientRunner> clients)
+ {
+ for(ClientRunner client: clients)
+ {
+ client.awaitShutdown();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org