[BagOStuff] De-breakified cas() for SqlBagOStuff.
authorAaron Schulz <aschulz@wikimedia.org>
Fri, 15 Feb 2013 04:18:42 +0000 (20:18 -0800)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 15 Feb 2013 14:31:19 +0000 (14:31 +0000)
* Seemed to be a functional merge conflict with sharding code.

Change-Id: I1e49790f6b82b09ea2cd6606ca918f0a620a191f

includes/objectcache/SqlBagOStuff.php

index bae1b75..5cc02d3 100644 (file)
@@ -324,28 +324,28 @@ class SqlBagOStuff extends BagOStuff {
         * @return bool
         */
        public function cas( $casToken, $key, $value, $exptime = 0 ) {
-               $db = $this->getDB();
-               $exptime = intval( $exptime );
-
-               if ( $exptime < 0 ) {
-                       $exptime = 0;
-               }
+               list( $serverIndex, $tableName ) = $this->getTableByKey( $key );
+               try {
+                       $db = $this->getDB( $serverIndex );
+                       $exptime = intval( $exptime );
 
-               if ( $exptime == 0 ) {
-                       $encExpiry = $this->getMaxDateTime();
-               } else {
-                       if ( $exptime < 3.16e8 ) { # ~10 years
-                               $exptime += time();
+                       if ( $exptime < 0 ) {
+                               $exptime = 0;
                        }
 
-                       $encExpiry = $db->timestamp( $exptime );
-               }
-               try {
+                       if ( $exptime == 0 ) {
+                               $encExpiry = $this->getMaxDateTime( $db );
+                       } else {
+                               if ( $exptime < 3.16e8 ) { # ~10 years
+                                       $exptime += time();
+                               }
+                               $encExpiry = $db->timestamp( $exptime );
+                       }
                        $db->begin( __METHOD__ );
                        // (bug 24425) use a replace if the db supports it instead of
                        // delete/insert to avoid clashes with conflicting keynames
                        $db->update(
-                               $this->getTableByKey( $key ),
+                               $tableName,
                                array(
                                        'keyname' => $key,
                                        'value' => $db->encodeBlob( $this->serialize( $value ) ),
@@ -354,7 +354,9 @@ class SqlBagOStuff extends BagOStuff {
                                array(
                                        'keyname' => $key,
                                        'value' => $db->encodeBlob( $this->serialize( $casToken ) )
-                               ), __METHOD__ );
+                               ),
+                               __METHOD__
+                       );
                        $db->commit( __METHOD__ );
                } catch ( DBQueryError $e ) {
                        $this->handleWriteError( $e );