Catch rollback exceptions in API exception handling
authorBrad Jorsch <bjorsch@wikimedia.org>
Fri, 3 Apr 2015 16:12:30 +0000 (12:12 -0400)
committerBrad Jorsch <bjorsch@wikimedia.org>
Mon, 6 Apr 2015 17:18:22 +0000 (13:18 -0400)
Like I92293b22, but for the API. Needed for I41508127f fixing ignore
handling in the DB.

Change-Id: I1f2b70c80c7496f463f678b950c08de22476ea66

includes/api/ApiMain.php

index 1feb485..2978453 100644 (file)
@@ -416,7 +416,13 @@ class ApiMain extends ApiBase {
                // Bug 63145: Rollback any open database transactions
                if ( !( $e instanceof UsageException ) ) {
                        // UsageExceptions are intentional, so don't rollback if that's the case
-                       MWExceptionHandler::rollbackMasterChangesAndLog( $e );
+                       try {
+                               MWExceptionHandler::rollbackMasterChangesAndLog( $e );
+                       } catch ( DBError $e2 ) {
+                               // Rollback threw an exception too. Log it, but don't interrupt
+                               // our regularly scheduled exception handling.
+                               MWExceptionHandler::logException( $e2 );
+                       }
                }
 
                // Allow extra cleanup and logging