private void writeJournalEntries()

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);
  }