add retry_transaction helper