objectcache: Optimize changeTTL() for SqlBagOStuff
authorAaron Schulz <aschulz@wikimedia.org>
Mon, 15 Aug 2016 19:21:10 +0000 (12:21 -0700)
committerKrinkle <krinklemail@gmail.com>
Wed, 17 Aug 2016 19:14:09 +0000 (19:14 +0000)
Change-Id: I539dd83175a8ea922221f194e23ca47aea7539cf

includes/objectcache/SqlBagOStuff.php

index c48880f..5556dd8 100644 (file)
@@ -471,6 +471,27 @@ class SqlBagOStuff extends BagOStuff {
                return $ok;
        }
 
+       public function changeTTL( $key, $expiry = 0 ) {
+               list( $serverIndex, $tableName ) = $this->getTableByKey( $key );
+               try {
+                       $db = $this->getDB( $serverIndex );
+                       $db->update(
+                               $tableName,
+                               [ 'exptime' => $db->timestamp( $this->convertExpiry( $expiry ) ) ],
+                               [ 'keyname' => $key, 'exptime > ' . $db->addQuotes( $db->timestamp( time() ) ) ],
+                               __METHOD__
+                       );
+                       if ( $db->affectedRows() == 0 ) {
+                               return false;
+                       }
+               } catch ( DBError $e ) {
+                       $this->handleWriteError( $e, $serverIndex );
+                       return false;
+               }
+
+               return true;
+       }
+
        /**
         * @param IDatabase $db
         * @param string $exptime