Currently, transactions on TransactionParticipants across shards have independent expiration times based on when the transaction was started on the shard. This could mean that the transaction may expire and abort on one shard while we continue to do work on other shards for an extended period of time, not aborting until prepare is sent by the coordinator, when we should be able to abort the transaction by either:
- Sending voteAbort immediately from the participant to the coordinator on timeout, or
- Constructing a deadline on mongos when the transaction begins, and send it to each shard for the first operation on that shard in the transaction