Retry logic is transparent for the client/user, and the user won’t see any error due to transaction abort.
This feature is not configurable and will be used by any mutation starting a transaction.
The transactions could conflict due to various reasons. It could be due to mutation on xids or on index keys as well. The idea for using transactions is to keep data consistent for concurrent mutation.
The transaction conflict can be detected when we call CommitOrAbort() on the transaction. It would return codes.Aborted if the transaction is aborted.