Answer
Database-level transaction rollback on an interruption is automatic, but only within whatever is still part of the same uncommitted transaction at the point the error occurs — for a complex business-logic flow like Pick_Reservations__, which can internally perform multiple distinct steps (potentially including its own intermediate commits as part of normal operation), a failure partway through doesn't automatically undo earlier steps that already completed as their own discrete unit, unless the business logic itself was specifically designed to treat the whole flow as one atomic transaction. In this specific case, the CustomerOrder.LOCKED2 error is what's actually triggering the problem, so the more reliable fix is addressing that at the source: identify and avoid whatever is causing the Customer Order to be locked at the point your integration calls Pick_Reservations__ (for example, checking for and waiting out contention before calling it), rather than relying on the framework to guarantee full rollback across what is, internally, a multi-step business process.