Folosesc Drupal în spatele unui strat proxy/cache inversat (de exemplu, Cloud Front/Akamai) și uneori serviciul merge destul de lent (deci primesc un timeout Gateway, din motive precum prea multe persoane folosesc serverele) sau se întâmplă ceva rău în ferma de servere (micro-arhitectură docker) și astfel am un 502 Bad Gateway.
Știm dacă o tranzacție de bază de date va fi anulată în astfel de cazuri?
Acest lucru este relevant în special atunci când se efectuează actualizări de peste 800 de entități prin API-ul Batch.
De exemplu.
(pe baza codului simulat: https://www.drupal.org/docs/drupal-apis/database-api/database-transactions)
$tranzacție = $conexiune->startTransaction();
încerca {
// Faceți ceva care scrie în baza de date.
$entity = create_some_entity();
$entity->salvare();
// Pretindeți-vă că aici s-a întâmplat o expirare 502 Bad Gateway sau Gateway.
// Efectuați o altă scriere de bază de date care depinde de prima.
$dependent_entity = update_dependent_entity($entity->id());
$entitate_dependenta->salvare();
}
captură (\Excepție $e) {
// A apărut o eroare la scrierea în baza de date, deci baza de date este anulată
// la starea când tranzacția a fost începută.
// Nu sunt sigur dacă prinderea unei excepții va face ceva aici.
// (deoarece nu se așteaptă nicio excepție)
$tranzacție->rollBack();
}
// Se comite tranzacția prin dezactivarea variabilei $tranzacție.
unset($tranzacție);