@Override public void handleEvent(OperationEvent event) { if (event.getEventType().equals(OperationEvent.OperationEventType.COMPLETE)) { this.metrics.mark("#" + metrics.getCount()); putLimiter.removeJob(event.getFileID()); } else if (event.getEventType().equals(OperationEvent.OperationEventType.FAILED)) { this.metrics.registerError(event.getInfo()); putLimiter.removeJob(event.getFileID()); } }
@Test(groups = {"pillar-stress-test"}) public void parallelPut() throws Exception { final int numberOfFiles = testConfiguration.getInt("pillarintegrationtest.PutFileStressIT.parallelPut.numberOfFiles"); final int partStatisticsInterval = testConfiguration.getInt( "pillarintegrationtest.PutFileStressIT.parallelPut.partStatisticsInterval"); final int numberOfParallelPuts = testConfiguration.getInt( "pillarintegrationtest.PutFileStressIT.parallelPut.numberOfParallelPuts"); addDescription( "Attempt to put " + numberOfFiles + " files into the pillar, " + numberOfParallelPuts + " at 'same' time."); String[] fileIDs = TestFileHelper.createFileIDs(numberOfFiles, "parallelPutTest"); final Metrics metrics = new Metrics("put", numberOfFiles, partStatisticsInterval); metrics.addAppenders(metricAppenders); metrics.start(); addStep("Add " + numberOfFiles + " files", "Not errors should occur"); ParallelPutLimiter putLimiter = new ParallelPutLimiter(numberOfParallelPuts); EventHandler eventHandler = new PutEventHandlerForMetrics(metrics, putLimiter); for (String fileID : fileIDs) { putLimiter.addJob(fileID); putClient.putFile( collectionID, httpServerConfiguration.getURL(TestFileHelper.DEFAULT_FILE_ID), fileID, 10L, TestFileHelper.getDefaultFileChecksum(), null, eventHandler, "parallelPut stress test file"); } awaitAsynchronousCompletion(metrics, numberOfFiles); addStep( "Check that the files are now present on the pillar(s)", "No missing files should be found."); existingFiles = fileIDs; }