in component-test/src/main/java/org/apache/fineract/cn/accounting/StressTestJournalEntry.java [55:93]
private void writeJournalEntries(final int numberOfThreads, final int numberOfJournalEntries, final Account[] preparedAccountsAsArray) {
final List<Future<?>> futures = new ArrayList<>(numberOfThreads);
final ExecutorService executorService = Executors.newFixedThreadPool(numberOfThreads);
final AtomicLong totalExecutionTime = new AtomicLong(0L);
for (int t = 0; t < numberOfThreads; t++) {
final Future<?> future = executorService.submit(
() -> {
long executionTime = 0L;
int randomBound = preparedAccountsAsArray.length;
for (int i = 0; i < numberOfJournalEntries; i++) {
final Account debtorAccount = preparedAccountsAsArray[RandomUtils.nextInt(randomBound)];
final Account creditorAccount = preparedAccountsAsArray[RandomUtils.nextInt(randomBound)];
final JournalEntry randomJournalEntry =
JournalEntryGenerator.createRandomJournalEntry(debtorAccount, "50.00", creditorAccount, "50.00");
final long start = System.currentTimeMillis();
this.testSubject.createJournalEntry(randomJournalEntry);
executionTime += (System.currentTimeMillis() - start);
}
totalExecutionTime.addAndGet(executionTime);
}
);
futures.add(future);
}
futures.forEach(future -> {
try {
future.get();
} catch (Exception e) {
e.printStackTrace();
}
});
final long numberOfProcessedJournalEntries = numberOfJournalEntries * numberOfThreads;
final long processingTime = totalExecutionTime.get();
this.logger.error("Added {} journal entries in {}s.", numberOfProcessedJournalEntries, (processingTime / 1000L));
this.logger.error("Average processing time for one journal entry: {}ms", processingTime / numberOfProcessedJournalEntries);
}