Вопрос проверяет умение проектировать отказоустойчивые финансовые и транзакционные механизмы.
Rollback проектируется вокруг транзакций и сохранения состояния. Если операция не завершена — используется откат БД. Если изменения уже зафиксированы — применяется компенсационная операция. Ключевое — заранее хранить данные, необходимые для возврата.
Rollback перевода — это восстановление корректного состояния системы после частично или полностью выполненной операции.
Перед перечислением важно зафиксировать:
выбор механизма зависит от того, зафиксированы ли изменения в базе.
Используется, если ошибка произошла до COMMIT.
Все изменения в одной транзакции
При ошибке — ROLLBACK
Система возвращается в исходное состояние
Подходит для:
синхронных операций
одного хранилища данных
Используется после фиксации данных.
Создаётся обратная операция
Используются сохранённые исходные значения
Меняется статус основной операции
Пример:
def compensate_transfer(transfer):
restore_balance(transfer.sender, transfer.amount)
mark_failed(transfer)
Идемпотентность компенсации
Защиту от повторного выполнения
Явные статусы операций
Аудит и логирование
Надёжный rollback начинается на этапе проектирования. Без сохранённого контекста и статусов корректный возврат невозможен.