@Override public void close() throws IOException { for(final LoadController nextController : loadChain) { try { nextController.close(); } catch(final IOException e) { LogUtil.exception( Level.WARN, e, "Failed to close the step \"{}\"", nextController.getName() ); } } loadChain.clear(); nodeConfigList.clear(); } }
private boolean allIoTasksCompleted() { long generatedIoTasks = 0; for(final LoadGenerator<I, O> generator : generatorsMap.values()) { try { if(generator.isInterrupted()) { generatedIoTasks += generator.getGeneratedTasksCount(); } else { return false; } } catch(final RemoteException e) { LogUtil.exception( Level.WARN, e, "Failed to communicate with load generator \"{}\"", generator ); } } return counterResults.longValue() >= generatedIoTasks; }
private boolean nothingToRecycle() { if(generatorsMap.size() == 1) { final LoadGenerator<I, O> soleLoadGenerator = generatorsMap.values().iterator().next(); try { if(soleLoadGenerator.isStarted()) { return false; } } catch(final RemoteException e) { LogUtil.exception(Level.WARN, e, "Failed to check the load generator state"); } // load generator has done its work final long generatedIoTasks = soleLoadGenerator.getGeneratedTasksCount(); if( soleLoadGenerator.isRecycling() && counterResults.sum() >= generatedIoTasks && // all generated I/O tasks executed at least once latestIoResultsPerItem.size() == 0 // no successful I/O results ) { return true; } } return false; }
weightMap.put(loadGenerator.hashCode(), generatorConfig.getWeight()); itemDataSizes.put(loadGenerator, dataConfig.getSize()); loadConfigMap.put(loadGenerator, loadConfig); controller.setIoResultsOutput(itemOutput); controller.start(); Loggers.MSG.info("Weighted load step \"{}\" started", controller.getName()); if(controller.await(timeLimitSec, TimeUnit.SECONDS)) { Loggers.MSG.info("Weighted load step \"{}\" done", controller.getName()); } else { Loggers.MSG.info("Weighted load step \"{}\" timeout", controller.getName());
queueConfig.getOutput(), TimeUnit.SECONDS, itemOutputConfig.getDelay() ); loadController.setIoResultsOutput(nextItemBuff); } else { itemOutputPath ); loadController.setIoResultsOutput(itemOutput); nextController.start(); Loggers.MSG.info("Load step \"{}\" started", nextController.getName()); try { try { if(controller.await(timeRemainSec, TimeUnit.SECONDS)) { Loggers.MSG.info("Load step \"{}\" done", controller.getName()); } else { Loggers.MSG.info("Load step \"{}\" timeout", controller.getName()); controller.interrupt();
controller.setIoResultsOutput(itemOutput); controller.start(); Loggers.MSG.info("Load step \"{}\" started", stepId); if(controller.await(timeLimitSec, TimeUnit.SECONDS)) { Loggers.MSG.info("Load step \"{}\" done", stepId); } else {
for(final LoadGenerator<I, O> nextGenerator : driversMap.keySet()) { generatorsMap.put(nextGenerator.hashCode(), nextGenerator); nextGenerator.setWeightThrottle(weightThrottle); nextGenerator.setRateThrottle(rateThrottle); nextGenerator.setOutputs(driversMap.get(nextGenerator)); .get(nextGenerator).getMetricsConfig(); final LoadConfig nextLoadConfig = loadConfigs.get(nextGenerator); if(nextGenerator.isRecycling()) { anyCircularFlag = true;
final int originCode = ioTaskResult.getOriginCode(); final LoadGenerator<I, O> loadGenerator = generatorsMap.get(originCode); if(loadGenerator.isRecycling()) { latestIoResultsPerItem.put(ioTaskResult.getItem(), ioTaskResult); loadGenerator.recycle(ioTaskResult); } else if(ioResultsOutput != null) { try {
if(!nextLoadGenerator.isInterrupted() && !nextLoadGenerator.isClosed()) { return false;
nextGenerator.start(); } catch(final IllegalStateException | RemoteException e) { LogUtil.exception(
.put(KEY_CLASS_NAME, getClass().getSimpleName()) ) { nextGenerator.interrupt(); Loggers.MSG.debug( "{}: load generator \"{}\" interrupted", getName(),
() -> { try { generator.close(); Loggers.MSG.debug( "{}: the load generator \"{}\" has been closed", getName(),
weightMap.put(loadGenerator.hashCode(), (int) weights.get(i)); controller.setIoResultsOutput(itemOutput); controller.start(); Loggers.MSG.info("Mixed load step \"{}\" started", controller.getName()); if(controller.await(timeLimitSec, TimeUnit.SECONDS)) { Loggers.MSG.info("Mixed load step \"{}\" done", controller.getName()); } else { Loggers.MSG.info("Mixed load step \"{}\" timeout", controller.getName());
queueConfig.getOutput(), TimeUnit.SECONDS, itemOutputConfig.getDelay() ); loadController.setIoResultsOutput(nextItemBuff); } else { itemOutputPath ); loadController.setIoResultsOutput(itemOutput); nextController.start(); Loggers.MSG.info("Load step \"{}\" started", nextController.getName()); try { try { if(controller.await(timeRemainSec, TimeUnit.SECONDS)) { Loggers.MSG.info("Load step \"{}\" done", controller.getName()); } else { Loggers.MSG.info("Load step \"{}\" timeout", controller.getName()); controller.interrupt();
controller.setIoResultsOutput(itemOutput); controller.start(); Loggers.MSG.info("Load step \"{}\" started", stepId); if(controller.await(timeLimitSec, TimeUnit.SECONDS)) { Loggers.MSG.info("Load step \"{}\" done", stepId); } else {
@Override public void close() throws IOException { for(final LoadController nextController : loadChain) { try { nextController.close(); } catch(final IOException e) { LogUtil.exception( Level.WARN, e, "Failed to close the step \"{}\"", nextController.getName() ); } } loadChain.clear(); nodeConfigList.clear(); } }
} else { loadGenerator = generatorsMap.get(originCode); if(loadGenerator.isRecycling()) { latestIoResultsPerItem.put(ioTaskResult.getItem(), ioTaskResult); loadGenerator.recycle(ioTaskResult); } else if(ioResultsOutput != null) { try {
weightMap.put(loadGenerator.hashCode(), (int) weights.get(i)); controller.setIoResultsOutput(itemOutput); controller.start(); Loggers.MSG.info("Mixed load step \"{}\" started", controller.getName()); if(controller.await(timeLimitSec, TimeUnit.SECONDS)) { Loggers.MSG.info("Mixed load step \"{}\" done", controller.getName()); } else { Loggers.MSG.info("Mixed load step \"{}\" timeout", controller.getName());
controller.setIoResultsOutput(itemOutput); controller.start(); Loggers.MSG.info("Load step \"{}\" started", stepId); if(controller.await(timeLimitSec, TimeUnit.SECONDS)) { Loggers.MSG.info("Load step \"{}\" done", stepId); } else {
@Override public void close() throws IOException { super.close(); if(loadChain != null) { for(final LoadController nextController : loadChain) { try { nextController.close(); } catch(final IOException e) { LogUtil.exception( Level.WARN, e, "Failed to close the step \"{}\"", nextController.getName() ); } } loadChain.clear(); } }