From: Brian Wolff Date: Sun, 6 Apr 2014 02:15:26 +0000 (-0300) Subject: Make chunked upload jobs robust in face of exceptions. X-Git-Tag: 1.31.0-rc.0~16356^2 X-Git-Url: https://git.cyclocoop.org/%242?a=commitdiff_plain;h=eef642ef1d0aa68420d334fe25bb7f7a8f5a5540;p=lhc%2Fweb%2Fwiklou.git Make chunked upload jobs robust in face of exceptions. If an exception occurs when creating the new image page during PublishStashedFile (for example, if ExternalStorage servers become overloaded), the job is aborted, but the current transaction is not aborted. Then the next job comes along, does $dbw->begin(), which implicitly commits the current open transactions, causing database corruption (entries in page table with page_latest = 0). This patch ensures that if some unknown exception occurs during the job, that the database gets rolled back to a known good state. I also plan to make a separate patch to make the recordUpload code handle exceptions properly. Nonetheless, I think its important that the general job code be as robust as possible. Bug: 32551 Change-Id: Icb5e06e81700e5dcf0d4e739c7b2bb3221e718b8 --- diff --git a/includes/jobqueue/jobs/AssembleUploadChunksJob.php b/includes/jobqueue/jobs/AssembleUploadChunksJob.php index 19b05586d4..9e9bda6ff0 100644 --- a/includes/jobqueue/jobs/AssembleUploadChunksJob.php +++ b/includes/jobqueue/jobs/AssembleUploadChunksJob.php @@ -112,6 +112,8 @@ class AssembleUploadChunksJob extends Job { ) ); $this->setLastError( get_class( $e ) . ": " . $e->getText() ); + // To be extra robust. + MWExceptionHandler::rollbackMasterChangesAndLog( $e ); return false; } diff --git a/includes/jobqueue/jobs/PublishStashedFileJob.php b/includes/jobqueue/jobs/PublishStashedFileJob.php index d7667f390a..918a392db4 100644 --- a/includes/jobqueue/jobs/PublishStashedFileJob.php +++ b/includes/jobqueue/jobs/PublishStashedFileJob.php @@ -125,6 +125,9 @@ class PublishStashedFileJob extends Job { ) ); $this->setLastError( get_class( $e ) . ": " . $e->getText() ); + // To prevent potential database referential integrity issues. + // See bug 32551. + MWExceptionHandler::rollbackMasterChangesAndLog( $e ); return false; }