Я использую Drupal за обратным уровнем прокси/кеша (например, Cloud Front/Akamai), и иногда служба работает довольно медленно (поэтому я получаю тайм-аут шлюза по таким причинам, как слишком много людей используют серверы) или что-то плохое происходит в ферме серверов (микроархитектура докера) и поэтому я получаю 502 Bad Gateway.
Знаем ли мы, будет ли в таких случаях откатываться транзакция базы данных?
Это особенно актуально при выполнении более 800 обновлений сущностей через пакетный API.
Например.
(на основе фиктивного кода: https://www.drupal.org/docs/drupal-apis/database-api/database-transactions)
$transaction = $connection->startTransaction();
пытаться {
// Делаем что-то, что записывает в базу данных.
$entity = create_some_entity();
$сущность->сохранить();
// Притворимся, что здесь произошел 502 Bad Gateway или тайм-аут шлюза.
// Сделать еще одну запись в базу данных, которая зависит от первой.
$зависимая_сущность = update_зависимая_сущность($сущность->id());
$зависимая_сущность->сохранить();
}
поймать (\ Исключение $e) {
// Произошла ошибка записи в БД, поэтому БД откатывается
// в состояние, когда транзакция была запущена.
// Не уверен, что перехват исключения что-нибудь здесь сделает.
// (поскольку исключений не ожидается)
$транзакция->откат();
}
// Зафиксировать транзакцию, сбросив переменную $transaction.
отменить ($ транзакция);