+ checkTransactionReadied();
+
+ final AsyncFunction<Boolean, Void> validateFunction = input -> prepare();
+ final AsyncFunction<Void, Void> prepareFunction = input -> commit();
+
+ // transform validate into prepare
+ final ListenableFuture<Void> prepareFuture = Futures.transformAsync(validate(), validateFunction,
+ MoreExecutors.directExecutor());
+ // transform prepare into commit and return as submit result
+ return Futures.transformAsync(prepareFuture, prepareFunction, MoreExecutors.directExecutor());
+ }
+
+ private void checkTransactionReadied() {
+ Preconditions.checkState(!cohorts.isEmpty(), "Transaction not readied yet");