in modules/core/src/main/java/org/apache/fluo/core/impl/TransactionImpl.java [924:960]
CompletableFuture<Boolean> getMainOp(CommitData cd) {
// TODO not sure threading is correct
Executor ace = env.getSharedResources().getAsyncCommitExecutor();
return getACW(cd).apply(createMutations(cd)).thenCompose(results -> {
// ugh icky that this is an iterator, forces copy to inspect.. could refactor async CW to
// return collection
ArrayList<Result> resultsList = new ArrayList<>();
Iterators.addAll(resultsList, results);
boolean containsUknown = false;
for (Result result : resultsList) {
try {
containsUknown |= result.getStatus() == Status.UNKNOWN;
} catch (Exception e) {
throw new CompletionException(e);
}
}
if (containsUknown) {
// process unknown in sync executor
Executor se = env.getSharedResources().getSyncCommitExecutor();
return CompletableFuture.supplyAsync(() -> {
try {
return handleUnknown(cd, resultsList.iterator());
} catch (Exception e) {
throw new CompletionException(e);
}
}, se);
} else {
return CompletableFuture.completedFuture(resultsList.iterator());
}
}).thenApplyAsync(results -> {
try {
return processResults(cd, results);
} catch (Exception e) {
throw new CompletionException(e);
}
}, ace);
}