From 59e803274b6e20cd178a2cb36edb7112f44f0926 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Thu, 21 Nov 2013 16:26:24 -0800 Subject: [PATCH] Made SqlBagOStuff fully avoid transactions when possible Change-Id: I775d872b522f68462496bbfa685665cc8faf9bf1 --- includes/objectcache/SqlBagOStuff.php | 36 +++++++++++++-------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/includes/objectcache/SqlBagOStuff.php b/includes/objectcache/SqlBagOStuff.php index acf270364a..919b8b316c 100644 --- a/includes/objectcache/SqlBagOStuff.php +++ b/includes/objectcache/SqlBagOStuff.php @@ -248,13 +248,13 @@ class SqlBagOStuff extends BagOStuff { $db = $this->getDB( $row->serverIndex ); if ( $this->isExpired( $db, $row->exptime ) ) { // MISS $this->debug( "get: key has expired, deleting" ); - $db->begin( __METHOD__ ); + $db->commit( __METHOD__, 'flush' ); # Put the expiry time in the WHERE condition to avoid deleting a # newly-inserted value $db->delete( $row->tableName, array( 'keyname' => $key, 'exptime' => $row->exptime ), __METHOD__ ); - $db->commit( __METHOD__ ); + $db->commit( __METHOD__, 'flush' ); $values[$key] = false; } else { // HIT $values[$key] = $this->unserialize( $db->decodeBlob( $row->value ) ); @@ -296,7 +296,7 @@ class SqlBagOStuff extends BagOStuff { $encExpiry = $db->timestamp( $exptime ); } - $db->begin( __METHOD__ ); + $db->commit( __METHOD__, 'flush' ); // (bug 24425) use a replace if the db supports it instead of // delete/insert to avoid clashes with conflicting keynames $db->replace( @@ -307,7 +307,7 @@ class SqlBagOStuff extends BagOStuff { 'value' => $db->encodeBlob( $this->serialize( $value ) ), 'exptime' => $encExpiry ), __METHOD__ ); - $db->commit( __METHOD__ ); + $db->commit( __METHOD__, 'flush' ); } catch ( DBError $e ) { $this->handleWriteError( $e, $serverIndex ); return false; @@ -341,7 +341,7 @@ class SqlBagOStuff extends BagOStuff { } $encExpiry = $db->timestamp( $exptime ); } - $db->begin( __METHOD__ ); + $db->commit( __METHOD__, 'flush' ); // (bug 24425) use a replace if the db supports it instead of // delete/insert to avoid clashes with conflicting keynames $db->update( @@ -357,7 +357,7 @@ class SqlBagOStuff extends BagOStuff { ), __METHOD__ ); - $db->commit( __METHOD__ ); + $db->commit( __METHOD__, 'flush' ); } catch ( DBQueryError $e ) { $this->handleWriteError( $e, $serverIndex ); @@ -376,12 +376,12 @@ class SqlBagOStuff extends BagOStuff { list( $serverIndex, $tableName ) = $this->getTableByKey( $key ); try { $db = $this->getDB( $serverIndex ); - $db->begin( __METHOD__ ); + $db->commit( __METHOD__, 'flush' ); $db->delete( $tableName, array( 'keyname' => $key ), __METHOD__ ); - $db->commit( __METHOD__ ); + $db->commit( __METHOD__, 'flush' ); } catch ( DBError $e ) { $this->handleWriteError( $e, $serverIndex ); return false; @@ -400,7 +400,7 @@ class SqlBagOStuff extends BagOStuff { try { $db = $this->getDB( $serverIndex ); $step = intval( $step ); - $db->begin( __METHOD__ ); + $db->commit( __METHOD__, 'flush' ); $row = $db->selectRow( $tableName, array( 'value', 'exptime' ), @@ -409,14 +409,14 @@ class SqlBagOStuff extends BagOStuff { array( 'FOR UPDATE' ) ); if ( $row === false ) { // Missing - $db->commit( __METHOD__ ); + $db->commit( __METHOD__, 'flush' ); return null; } $db->delete( $tableName, array( 'keyname' => $key ), __METHOD__ ); if ( $this->isExpired( $db, $row->exptime ) ) { // Expired, do not reinsert - $db->commit( __METHOD__ ); + $db->commit( __METHOD__, 'flush' ); return null; } @@ -434,7 +434,7 @@ class SqlBagOStuff extends BagOStuff { // Race condition. See bug 28611 $newValue = null; } - $db->commit( __METHOD__ ); + $db->commit( __METHOD__, 'flush' ); } catch ( DBError $e ) { $this->handleWriteError( $e, $serverIndex ); return null; @@ -524,7 +524,7 @@ class SqlBagOStuff extends BagOStuff { $maxExpTime = $row->exptime; } - $db->begin( __METHOD__ ); + $db->commit( __METHOD__, 'flush' ); $db->delete( $this->getTableNameByShard( $i ), array( @@ -533,7 +533,7 @@ class SqlBagOStuff extends BagOStuff { 'keyname' => $keys ), __METHOD__ ); - $db->commit( __METHOD__ ); + $db->commit( __METHOD__, 'flush' ); if ( $progressCallback ) { if ( intval( $totalSeconds ) === 0 ) { @@ -566,9 +566,9 @@ class SqlBagOStuff extends BagOStuff { try { $db = $this->getDB( $serverIndex ); for ( $i = 0; $i < $this->shards; $i++ ) { - $db->begin( __METHOD__ ); + $db->commit( __METHOD__, 'flush' ); $db->delete( $this->getTableNameByShard( $i ), '*', __METHOD__ ); - $db->commit( __METHOD__ ); + $db->commit( __METHOD__, 'flush' ); } } catch ( DBError $e ) { $this->handleWriteError( $e, $serverIndex ); @@ -684,12 +684,12 @@ class SqlBagOStuff extends BagOStuff { } for ( $i = 0; $i < $this->shards; $i++ ) { - $db->begin( __METHOD__ ); + $db->commit( __METHOD__, 'flush' ); $db->query( 'CREATE TABLE ' . $db->tableName( $this->getTableNameByShard( $i ) ) . ' LIKE ' . $db->tableName( 'objectcache' ), __METHOD__ ); - $db->commit( __METHOD__ ); + $db->commit( __METHOD__, 'flush' ); } } } -- 2.20.1