In the current code in applyTransaction we have
CompletableFuture<Message> future = CompletableFuture
.supplyAsync(() -> runCommand(request, trxLogIndex)); We are using ForkJoin#commonPool.
With the current approach we have 2 issues:
- Thread exhausts when using this common pool.
- Not a good practice of using common pool. Found some issues in our testing by using similarly in RatisPipelineUtils.
- OM DB's across replica can be out of sync when the apply transactions are applied in out of order.