Issue #1484216 by Berdir, beejeebus: Fixed Race condition in _update_create_fetch_task() (PDO Exceptions).

8.0.x
catch 2012-04-28 10:12:05 +09:00
parent c7c6b79d31
commit 9b88eeac14
1 changed files with 16 additions and 6 deletions

View File

@ -237,12 +237,22 @@ function _update_create_fetch_task($project) {
if (empty($fetch_tasks[$cid])) {
$queue = queue('update_fetch_tasks');
$queue->createItem($project);
db_insert('cache_update')
->fields(array(
'cid' => $cid,
'created' => REQUEST_TIME,
))
->execute();
// Due to race conditions, it is possible that another process already
// inserted a row into the {cache_update} table and the following query will
// throw an exception.
// @todo: Remove the need for the manual check by relying on a queue that
// enforces unique items.
try {
db_insert('cache_update')
->fields(array(
'cid' => $cid,
'created' => REQUEST_TIME,
))
->execute();
}
catch (Exception $e) {
// The exception can be ignored safely.
}
$fetch_tasks[$cid] = REQUEST_TIME;
}
}