> I think another way it could be handled is with nested transactions.
> Just have the promise phase be an inner transaction commit but have an
> outer transaction bracket that one for the actual commit.
Not really. In the event of a crash, most 2PC systems will expect the
participant to come back in the same state it crashed in.
Our nested-transaction implementation (like our standard transaction
implementation) aborts all transactions on crash.