Rollback transaction in case of uncaught exceptions during job
authorBrian Wolff <bawolff+wn@gmail.com>
Sun, 6 Apr 2014 02:02:02 +0000 (23:02 -0300)
committerBrian Wolff <bawolff+wn@gmail.com>
Sun, 6 Apr 2014 02:02:02 +0000 (23:02 -0300)
If there is an unhandled exception during a job, rollback the
transaction to be safe. Otherwise its likely that the
transaction will be commited when next job is run, as $dbw->begin()
implicitly commits any open pending transactions. This can result
in database referential integrity issues.

Change-Id: I5807e64440ff6c6651fbbb4924645d05d843b98e

includes/specials/SpecialRunJobs.php
maintenance/runJobs.php

index 0c45281..104cd54 100644 (file)
@@ -152,6 +152,7 @@ class SpecialRunJobs extends UnlistedSpecialPage {
                                }
                        } while ( --$n && $job );
                } catch ( MWException $e ) {
+                       MWExceptionHandler::rollbackMasterChangesAndLog( $e );
                        // We don't want exceptions thrown during job execution to
                        // be reported to the user since the output is already sent.
                        // Instead we just log them.
index f7d5fc0..cd657ac 100644 (file)
@@ -103,6 +103,7 @@ class RunJobs extends Maintenance {
                                        $status = $job->run();
                                        $error = $job->getLastError();
                                } catch ( MWException $e ) {
+                                       MWExceptionHandler::rollbackMasterChangesAndLog( $e );
                                        $status = false;
                                        $error = get_class( $e ) . ': ' . $e->getMessage();
                                        $e->report(); // write error to STDERR and the log