I am using Drupal behind a reverse proxy/cache layer (e.g. Cloud Front/ Akamai) and sometimes the service goes quite slow (so I get a Gateway timeout, for reasons such as too many people are using the servers) or a something bad happens in the server farm (docker micro-architecture) and so I get a 502 Bad Gateway.
Do we know if a database transaction will roll back in such cases?
This is especially relevant when doing 800+ entity updates via the Batch API.
E.g.
(based off mock code: https://www.drupal.org/docs/drupal-apis/database-api/database-transactions)
$transaction = $connection->startTransaction();
try {
// Do some thing that writes to the database.
$entity = create_some_entity();
$entity->save();
// Pretend a 502 Bad Gateway or Gateway timeout happened here.
// Do another database write that depends upon the first.
$dependent_entity = update_dependent_entity($entity->id());
$dependent_entity->save();
}
catch (\Exception $e) {
// There was an error in writing to the database, so the database is rolled back
// to the state when the transaction was started.
// Not sure if catching an exception will do anything here.
// (since no exception is expected)
$transaction->rollBack();
}
// Commit the transaction by unsetting the $transaction variable.
unset($transaction);