Javadoc
If the transaction has already been committed (by another thread, for
example) then we do nothing - could throw TransactionRequired or
INVALID_TRANSACTION. However, if it was rolledback then we throw
TRANSACTION_ROLLEDBACK. Seems like an inconsistency.
report_heuristics is ignored if we are a subtransaction.