From: Aaron Schulz Date: Tue, 26 Mar 2019 22:54:31 +0000 (-0700) Subject: objectcache: fix changeTTL() in RedisBagOStuff for edge cases X-Git-Tag: 1.34.0-rc.0~2298^2 X-Git-Url: http://git.cyclocoop.org/%22.htmlspecialchars%28%24url_syndic%29.%22?a=commitdiff_plain;h=dd3f360de883dbecfa056855d55b31b72ac484e3;p=lhc%2Fweb%2Fwiklou.git objectcache: fix changeTTL() in RedisBagOStuff for edge cases Change-Id: I2bb4bf843c8de8cefaf4188a8866ae51a28bbf71 --- diff --git a/includes/libs/objectcache/RedisBagOStuff.php b/includes/libs/objectcache/RedisBagOStuff.php index 79859dba45..2c74d45916 100644 --- a/includes/libs/objectcache/RedisBagOStuff.php +++ b/includes/libs/objectcache/RedisBagOStuff.php @@ -325,21 +325,29 @@ class RedisBagOStuff extends BagOStuff { return $result; } - public function changeTTL( $key, $expiry = 0, $flags = 0 ) { + public function changeTTL( $key, $exptime = 0, $flags = 0 ) { list( $server, $conn ) = $this->getConnection( $key ); if ( !$conn ) { return false; } - $expiry = $this->convertToRelative( $expiry ); + $relative = $this->expiryIsRelative( $exptime ); try { - $result = $conn->expire( $key, $expiry ); + if ( $exptime == 0 ) { + $result = $conn->persist( $key ); + $this->logRequest( 'persist', $key, $server, $result ); + } elseif ( $relative ) { + $result = $conn->expire( $key, $this->convertToRelative( $exptime ) ); + $this->logRequest( 'expire', $key, $server, $result ); + } else { + $result = $conn->expireAt( $key, $this->convertToExpiry( $exptime ) ); + $this->logRequest( 'expireAt', $key, $server, $result ); + } } catch ( RedisException $e ) { $result = false; $this->handleException( $conn, $e ); } - $this->logRequest( 'expire', $key, $server, $result ); return $result; }