* (bug 20468) User::invalidateCache throws 1205: Lock wait timeout exceeded
authorSam Reed <reedy@users.mediawiki.org>
Mon, 11 Apr 2011 12:56:23 +0000 (12:56 +0000)
committerSam Reed <reedy@users.mediawiki.org>
Mon, 11 Apr 2011 12:56:23 +0000 (12:56 +0000)
RELEASE-NOTES
includes/User.php

index 4a7e9c7..c8ac687 100644 (file)
@@ -237,6 +237,7 @@ PHP if you have not done so prior to upgrading MediaWiki.
 * (bug 28444) Fix regression: edit-on-doubleclick retains revision id again
 * (bug 28485) Block::purgeExpired Database returned error "1205: Lock wait timeout
   exceeded;"
+* (bug 20468) User::invalidateCache throws 1205: Lock wait timeout exceeded
 
  === API changes in 1.18 ===
 * (bug 26339) Throw warning when truncating an overlarge API result
index 3ffd4a9..c9ce405 100644 (file)
@@ -1729,12 +1729,18 @@ class User {
                if( $this->mId ) {
                        $this->mTouched = self::newTouchedTimestamp();
 
-                       $dbw = wfGetDB( DB_MASTER );
+                       // https://bugzilla.wikimedia.org/show_bug.cgi?id=20468
+                       // Create and use a new loadBalancer object, to prevent "1205: Lock wait timeout exceeded;"
+                       $lb = wfGetLBFactory()->newMainLB();
+                       $dbw = $lb->getConnection( DB_MASTER );
+
                        $dbw->update( 'user',
                                array( 'user_touched' => $dbw->timestamp( $this->mTouched ) ),
                                array( 'user_id' => $this->mId ),
                                __METHOD__ );
 
+                       $lb->commitMasterChanges();
+                       $lb->closeAll();
                        $this->clearSharedCache();
                }
        }