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