Transaction coverage fix for doDeleteArticleReal
authorAaron Schulz <aschulz@wikimedia.org>
Fri, 30 May 2014 17:03:12 +0000 (10:03 -0700)
committerAaron Schulz <aschulz@wikimedia.org>
Fri, 30 May 2014 20:59:45 +0000 (13:59 -0700)
* Do the FOR UPDATE select to get the ID *after* BEGIN, otherwise the
  locks will disappear right afterwards with the implicit commit.

Change-Id: Ia531126cb4a86ec7789ceb7327d1c235c7aa979c

includes/WikiPage.php

index 8fe948b..e7af6ee 100644 (file)
@@ -2744,15 +2744,22 @@ class WikiPage implements Page, IDBAccessObject {
                        return $status;
                }
 
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->begin( __METHOD__ );
+
                if ( $id == 0 ) {
                        $this->loadPageData( 'forupdate' );
                        $id = $this->getID();
                        if ( $id == 0 ) {
+                               $dbw->rollback( __METHOD__ );
                                $status->error( 'cannotdelete', wfEscapeWikiText( $this->getTitle()->getPrefixedText() ) );
                                return $status;
                        }
                }
 
+               // we need to remember the old content so we can use it to generate all deletion updates.
+               $content = $this->getContent( Revision::RAW );
+
                // Bitfields to further suppress the content
                if ( $suppress ) {
                        $bitfield = 0;
@@ -2765,11 +2772,6 @@ class WikiPage implements Page, IDBAccessObject {
                        $bitfield = 'rev_deleted';
                }
 
-               // we need to remember the old content so we can use it to generate all deletion updates.
-               $content = $this->getContent( Revision::RAW );
-
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->begin( __METHOD__ );
                // For now, shunt the revision data into the archive table.
                // Text is *not* removed from the text table; bulk storage
                // is left intact to avoid breaking block-compression or