@Arg(dest = "auth")
public ArrayList<String> auth;
+ @Arg(dest = "timeout")
+ public long timeout;
+
static ArgumentParser getParser() {
final ArgumentParser parser = ArgumentParsers.newArgumentParser("netconf stress client");
.help("Username and password for HTTP basic authentication in order username password.")
.dest("auth");
+ parser.addArgument("--timeout")
+ .type(Long.class)
+ .setDefault(5)
+ .help("Maximum time in minutes to wait for finishing all requests.")
+ .dest("timeout");
+
return parser;
}
void validate() {
Preconditions.checkArgument(port > 0, "Port =< 0");
Preconditions.checkArgument(editCount > 0, "Edit count =< 0");
+ Preconditions.checkArgument(timeout > 0, "Timeout =< 0");
Preconditions.checkArgument(editContent.exists(), "Edit content file missing");
Preconditions.checkArgument(editContent.isDirectory() == false, "Edit content file is a dir");
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
import net.sourceforge.argparse4j.inf.ArgumentParser;
import net.sourceforge.argparse4j.inf.ArgumentParserException;
import org.opendaylight.netconf.test.tool.TestToolUtils;
LOG.info("Starting performance test");
final Stopwatch started = Stopwatch.createStarted();
try {
- final List<Future<Void>> futures = executorService.invokeAll(callables, 5, TimeUnit.MINUTES);
- for (final Future<Void> future : futures) {
- try {
- future.get(4L, TimeUnit.MINUTES);
- } catch (ExecutionException | TimeoutException e) {
- throw new RuntimeException(e);
+ final List<Future<Void>> futures = executorService.invokeAll(callables, parameters.timeout, TimeUnit.MINUTES);
+ for (int i = 0; i < futures.size(); i++) {
+ Future<Void> future = futures.get(i);
+ if (future.isCancelled()) {
+ LOG.info("{}. thread timed out.", i + 1);
+ } else {
+ try {
+ future.get();
+ } catch (final ExecutionException e) {
+ LOG.info("{}. thread failed.", i + 1, e);
+ }
}
}
- executorService.shutdownNow();
} catch (final InterruptedException e) {
- throw new RuntimeException("Unable to execute requests", e);
+ LOG.warn("Unable to execute requests", e);
}
+ executorService.shutdownNow();
started.stop();
LOG.info("FINISHED. Execution time: {}", started);