Tôi đang sử dụng Drupal phía sau lớp bộ đệm/proxy đảo ngược (ví dụ: Cloud Front/Akamai) và đôi khi dịch vụ hoạt động khá chậm (vì vậy tôi bị hết thời gian chờ trên Cổng, vì những lý do như có quá nhiều người đang sử dụng máy chủ) hoặc có điều gì đó tồi tệ xảy ra trong trang trại máy chủ (kiến trúc vi mô docker) và vì vậy tôi nhận được 502 Bad Gateway.
Chúng ta có biết liệu một giao dịch cơ sở dữ liệu có quay trở lại trong những trường hợp như vậy không?
Điều này đặc biệt phù hợp khi thực hiện hơn 800 cập nhật thực thể thông qua API hàng loạt.
Ví dụ.
(dựa trên mã giả: https://www.drupal.org/docs/drupal-apis/database-api/database-transactions)
$transaction = $connection->startTransaction();
cố gắng {
// Làm một số việc ghi vào cơ sở dữ liệu.
$entity = create_some_entity();
$entity->save();
// Giả sử đã xảy ra lỗi 502 Bad Gateway hoặc Gateway timeout tại đây.
// Thực hiện ghi cơ sở dữ liệu khác phụ thuộc vào cơ sở dữ liệu đầu tiên.
$dependent_entity = update_dependent_entity($entity->id());
$dependent_entity->save();
}
bắt (\Ngoại lệ $e) {
// Có lỗi khi ghi vào cơ sở dữ liệu nên cơ sở dữ liệu bị khôi phục
// đến trạng thái khi giao dịch được bắt đầu.
// Không chắc chắn nếu bắt một ngoại lệ sẽ làm bất cứ điều gì ở đây.
// (vì không có ngoại lệ nào được mong đợi)
$giao dịch->rollBack();
}
// Thực hiện giao dịch bằng cách hủy đặt biến $transaction.
hủy đặt ($ giao dịch);