Avoid CAS errors on double post to ApiOptions

Bug: T95839
Change-Id: I62f8eea31164be1ab0eacf31c494f0b296b367f2
This commit is contained in:
Aaron Schulz 2015-09-24 23:19:06 -07:00
parent 9a3c7b43ea
commit ece85dd20f
2 changed files with 4 additions and 7 deletions

View file

@ -1203,18 +1203,15 @@ class User implements IDBAccessObject {
return false;
}
$db = ( $flags & self::READ_LATEST )
? wfGetDB( DB_MASTER )
: wfGetDB( DB_SLAVE );
list( $index, $options ) = DBAccessObjectUtils::getDBOptions( $flags );
$db = wfGetDB( $index );
$s = $db->selectRow(
'user',
self::selectFields(),
array( 'user_id' => $this->mId ),
__METHOD__,
( ( $flags & self::READ_LOCKING ) == self::READ_LOCKING )
? array( 'LOCK IN SHARE MODE' )
: array()
$options
);
$this->queryFlagsUsed = $flags;

View file

@ -55,7 +55,7 @@ class ApiOptions extends ApiBase {
// Load the user from the master to reduce CAS errors on double post (T95839)
if ( wfGetLB()->getServerCount() > 1 ) {
$user = User::newFromId( $user->getId() );
if ( !$user->loadFromId( User::READ_LATEST ) ) {
if ( !$user->loadFromId( User::READ_EXCLUSIVE ) ) {
$this->dieUsage( 'Anonymous users cannot change preferences', 'notloggedin' );
}
}