Skip to content

Commit 29268bf

Browse files
committed
Use INSERT IGNORE to handle conflicts gracefully.
1 parent 9dd4ea2 commit 29268bf

1 file changed

Lines changed: 4 additions & 15 deletions

File tree

wcfsetup/install/files/lib/system/background/BackgroundQueueHandler.class.php

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -81,32 +81,21 @@ public function enqueueAt(AbstractBackgroundJob|array $jobs, int $time): void
8181
$committed = false;
8282
try {
8383
WCF::getDB()->beginTransaction();
84-
$sql = "INSERT INTO wcf1_background_job
85-
(job, time,identifier)
86-
VALUES (?, ?, ?)";
84+
$sql = "INSERT IGNORE INTO wcf1_background_job
85+
(job, time,identifier)
86+
VALUES (?, ?, ?)";
8787
$statement = WCF::getDB()->prepare($sql);
88-
$sql = "SELECT jobID
89-
FROM wcf1_background_job
90-
WHERE identifier = ?
91-
FOR UPDATE";
92-
$selectJobStatement = WCF::getDB()->prepare($sql);
9388

9489
foreach ($jobs as $job) {
9590
$identifier = null;
9691
if ($job instanceof AbstractUniqueBackgroundJob) {
97-
// Check if the job is already in the queue
98-
$selectJobStatement->execute([$job->identifier()]);
99-
$jobID = $selectJobStatement->fetchSingleColumn();
100-
if ($jobID !== false) {
101-
continue;
102-
}
10392
$identifier = $job->identifier();
10493
}
10594

10695
$statement->execute([
10796
\serialize($job),
10897
$time,
109-
$identifier
98+
$identifier,
11099
]);
111100
}
112101
WCF::getDB()->commitTransaction();

0 commit comments

Comments
 (0)