In SqlBagOStuff::getMulti(), catch connect errors
authorTim Starling <tstarling@wikimedia.org>
Tue, 2 Apr 2013 22:47:53 +0000 (09:47 +1100)
committerTim Starling <tstarling@wikimedia.org>
Tue, 2 Apr 2013 22:56:42 +0000 (09:56 +1100)
This case was somehow neglected in Ifba0d276. The other methods work
correctly.

Change-Id: If29f0212f07c13bd72469c580bb096a2a41a96b5

includes/objectcache/SqlBagOStuff.php

index 87f787d..b6bf3f8 100644 (file)
@@ -222,8 +222,8 @@ class SqlBagOStuff extends BagOStuff {
 
                $dataRows = array();
                foreach ( $keysByTable as $serverIndex => $serverKeys ) {
-                       $db = $this->getDB( $serverIndex );
                        try {
+                               $db = $this->getDB( $serverIndex );
                                foreach ( $serverKeys as $tableName => $tableKeys ) {
                                        $res = $db->select( $tableName,
                                                array( 'keyname', 'value', 'exptime' ),
@@ -244,10 +244,10 @@ class SqlBagOStuff extends BagOStuff {
                        if ( isset( $dataRows[$key] ) ) { // HIT?
                                $row = $dataRows[$key];
                                $this->debug( "get: retrieved data; expiry time is " . $row->exptime );
-                               $db = $this->getDB( $row->serverIndex );
-                               if ( $this->isExpired( $db, $row->exptime ) ) { // MISS
-                                       $this->debug( "get: key has expired, deleting" );
-                                       try {
+                               try {
+                                       $db = $this->getDB( $row->serverIndex );
+                                       if ( $this->isExpired( $db, $row->exptime ) ) { // MISS
+                                               $this->debug( "get: key has expired, deleting" );
                                                $db->begin( __METHOD__ );
                                                # Put the expiry time in the WHERE condition to avoid deleting a
                                                # newly-inserted value
@@ -255,12 +255,12 @@ class SqlBagOStuff extends BagOStuff {
                                                        array( 'keyname' => $key, 'exptime' => $row->exptime ),
                                                        __METHOD__ );
                                                $db->commit( __METHOD__ );
-                                       } catch ( DBQueryError $e ) {
-                                               $this->handleWriteError( $e, $row->serverIndex );
+                                               $values[$key] = false;
+                                       } else { // HIT
+                                               $values[$key] = $this->unserialize( $db->decodeBlob( $row->value ) );
                                        }
-                                       $values[$key] = false;
-                               } else { // HIT
-                                       $values[$key] = $this->unserialize( $db->decodeBlob( $row->value ) );
+                               } catch ( DBQueryError $e ) {
+                                       $this->handleWriteError( $e, $row->serverIndex );
                                }
                        } else { // MISS
                                $values[$key] = false;