From: Aaron Schulz Date: Thu, 22 Aug 2019 04:23:30 +0000 (-0700) Subject: objectcache: add BagOStuff::fieldHasFlags() convenience method X-Git-Tag: 1.34.0-rc.0~616^2 X-Git-Url: http://git.cyclocoop.org/%7B%24admin_url%7Dmembres/Category:Foo?a=commitdiff_plain;h=b70e54e9864ed17b58c83e7e3be25db6f092f535;p=lhc%2Fweb%2Fwiklou.git objectcache: add BagOStuff::fieldHasFlags() convenience method Change-Id: Id2bf4ec0dd0999f988b70a895003c4b1aaae51a2 --- diff --git a/includes/libs/objectcache/BagOStuff.php b/includes/libs/objectcache/BagOStuff.php index da60c01959..73904e42c1 100644 --- a/includes/libs/objectcache/BagOStuff.php +++ b/includes/libs/objectcache/BagOStuff.php @@ -478,6 +478,16 @@ abstract class BagOStuff implements IExpiringStore, IStoreKeyEncoder, LoggerAwar return INF; } + /** + * @param int $field + * @param int $flags + * @return bool + * @since 1.34 + */ + final protected function fieldHasFlags( $field, $flags ) { + return ( ( $field & $flags ) === $flags ); + } + /** * Merge the flag maps of one or more BagOStuff objects into a "lowest common denominator" map * diff --git a/includes/libs/objectcache/CachedBagOStuff.php b/includes/libs/objectcache/CachedBagOStuff.php index 9fa9a89f9b..b1d2b6c74c 100644 --- a/includes/libs/objectcache/CachedBagOStuff.php +++ b/includes/libs/objectcache/CachedBagOStuff.php @@ -87,7 +87,7 @@ class CachedBagOStuff extends BagOStuff { public function set( $key, $value, $exptime = 0, $flags = 0 ) { $this->procCache->set( $key, $value, $exptime, $flags ); - if ( ( $flags & self::WRITE_CACHE_ONLY ) != self::WRITE_CACHE_ONLY ) { + if ( !$this->fieldHasFlags( $flags, self::WRITE_CACHE_ONLY ) ) { $this->backend->set( $key, $value, $exptime, $flags ); } @@ -96,7 +96,7 @@ class CachedBagOStuff extends BagOStuff { public function delete( $key, $flags = 0 ) { $this->procCache->delete( $key, $flags ); - if ( ( $flags & self::WRITE_CACHE_ONLY ) != self::WRITE_CACHE_ONLY ) { + if ( !$this->fieldHasFlags( $flags, self::WRITE_CACHE_ONLY ) ) { $this->backend->delete( $key, $flags ); } @@ -166,7 +166,8 @@ class CachedBagOStuff extends BagOStuff { public function setMulti( array $data, $exptime = 0, $flags = 0 ) { $this->procCache->setMulti( $data, $exptime, $flags ); - if ( ( $flags & self::WRITE_CACHE_ONLY ) != self::WRITE_CACHE_ONLY ) { + + if ( !$this->fieldHasFlags( $flags, self::WRITE_CACHE_ONLY ) ) { return $this->backend->setMulti( $data, $exptime, $flags ); } @@ -175,7 +176,8 @@ class CachedBagOStuff extends BagOStuff { public function deleteMulti( array $keys, $flags = 0 ) { $this->procCache->deleteMulti( $keys, $flags ); - if ( ( $flags & self::WRITE_CACHE_ONLY ) != self::WRITE_CACHE_ONLY ) { + + if ( !$this->fieldHasFlags( $flags, self::WRITE_CACHE_ONLY ) ) { return $this->backend->deleteMulti( $keys, $flags ); } @@ -184,7 +186,8 @@ class CachedBagOStuff extends BagOStuff { public function changeTTLMulti( array $keys, $exptime, $flags = 0 ) { $this->procCache->changeTTLMulti( $keys, $exptime, $flags ); - if ( ( $flags & self::WRITE_CACHE_ONLY ) != self::WRITE_CACHE_ONLY ) { + + if ( !$this->fieldHasFlags( $flags, self::WRITE_CACHE_ONLY ) ) { return $this->backend->changeTTLMulti( $keys, $exptime, $flags ); } diff --git a/includes/libs/objectcache/MediumSpecificBagOStuff.php b/includes/libs/objectcache/MediumSpecificBagOStuff.php index 329e600bb5..1242501b88 100644 --- a/includes/libs/objectcache/MediumSpecificBagOStuff.php +++ b/includes/libs/objectcache/MediumSpecificBagOStuff.php @@ -188,7 +188,7 @@ abstract class MediumSpecificBagOStuff extends BagOStuff { * @return bool True if the item was deleted or not found, false on failure */ public function delete( $key, $flags = 0 ) { - if ( ( $flags & self::WRITE_PRUNE_SEGMENTS ) != self::WRITE_PRUNE_SEGMENTS ) { + if ( !$this->fieldHasFlags( $flags, self::WRITE_PRUNE_SEGMENTS ) ) { return $this->doDelete( $key, $flags ); } @@ -598,9 +598,10 @@ abstract class MediumSpecificBagOStuff extends BagOStuff { * @since 1.24 */ public function setMulti( array $data, $exptime = 0, $flags = 0 ) { - if ( ( $flags & self::WRITE_ALLOW_SEGMENTS ) === self::WRITE_ALLOW_SEGMENTS ) { + if ( $this->fieldHasFlags( $flags, self::WRITE_ALLOW_SEGMENTS ) ) { throw new InvalidArgumentException( __METHOD__ . ' got WRITE_ALLOW_SEGMENTS' ); } + return $this->doSetMulti( $data, $exptime, $flags ); } @@ -615,6 +616,7 @@ abstract class MediumSpecificBagOStuff extends BagOStuff { foreach ( $data as $key => $value ) { $res = $this->doSet( $key, $value, $exptime, $flags ) && $res; } + return $res; } @@ -629,9 +631,10 @@ abstract class MediumSpecificBagOStuff extends BagOStuff { * @since 1.33 */ public function deleteMulti( array $keys, $flags = 0 ) { - if ( ( $flags & self::WRITE_ALLOW_SEGMENTS ) === self::WRITE_ALLOW_SEGMENTS ) { - throw new InvalidArgumentException( __METHOD__ . ' got WRITE_ALLOW_SEGMENTS' ); + if ( $this->fieldHasFlags( $flags, self::WRITE_PRUNE_SEGMENTS ) ) { + throw new InvalidArgumentException( __METHOD__ . ' got WRITE_PRUNE_SEGMENTS' ); } + return $this->doDeleteMulti( $keys, $flags ); } @@ -807,7 +810,7 @@ abstract class MediumSpecificBagOStuff extends BagOStuff { $usable = true; if ( - ( $flags & self::WRITE_ALLOW_SEGMENTS ) === self::WRITE_ALLOW_SEGMENTS && + $this->fieldHasFlags( $flags, self::WRITE_ALLOW_SEGMENTS ) && !is_int( $value ) && // avoid breaking incr()/decr() is_finite( $this->segmentationSize ) ) { diff --git a/includes/libs/objectcache/MemcachedPeclBagOStuff.php b/includes/libs/objectcache/MemcachedPeclBagOStuff.php index 3df483def1..12c1a7a5a4 100644 --- a/includes/libs/objectcache/MemcachedPeclBagOStuff.php +++ b/includes/libs/objectcache/MemcachedPeclBagOStuff.php @@ -332,7 +332,7 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff { // The PECL implementation is a naïve for-loop so use async I/O to pipeline; // https://github.com/php-memcached-dev/php-memcached/blob/master/php_memcached.c#L1852 - if ( ( $flags & self::WRITE_BACKGROUND ) == self::WRITE_BACKGROUND ) { + if ( $this->fieldHasFlags( $flags, self::WRITE_BACKGROUND ) ) { $client = $this->acquireAsyncClient(); $result = $client->setMulti( $data, $exptime ); $this->releaseAsyncClient( $client ); @@ -352,7 +352,7 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff { // The PECL implementation is a naïve for-loop so use async I/O to pipeline; // https://github.com/php-memcached-dev/php-memcached/blob/7443d16d02fb73cdba2e90ae282446f80969229c/php_memcached.c#L1852 - if ( ( $flags & self::WRITE_BACKGROUND ) == self::WRITE_BACKGROUND ) { + if ( $this->fieldHasFlags( $flags, self::WRITE_BACKGROUND ) ) { $client = $this->acquireAsyncClient(); $resultArray = $client->deleteMulti( $keys ) ?: []; $this->releaseAsyncClient( $client ); diff --git a/includes/libs/objectcache/MultiWriteBagOStuff.php b/includes/libs/objectcache/MultiWriteBagOStuff.php index d150880750..31d73e1b0a 100644 --- a/includes/libs/objectcache/MultiWriteBagOStuff.php +++ b/includes/libs/objectcache/MultiWriteBagOStuff.php @@ -106,7 +106,7 @@ class MultiWriteBagOStuff extends BagOStuff { } public function get( $key, $flags = 0 ) { - if ( ( $flags & self::READ_LATEST ) == self::READ_LATEST ) { + if ( $this->fieldHasFlags( $flags, self::READ_LATEST ) ) { // If the latest write was a delete(), we do NOT want to fallback // to the other tiers and possibly see the old value. Also, this // is used by merge(), which only needs to hit the primary. @@ -125,7 +125,7 @@ class MultiWriteBagOStuff extends BagOStuff { if ( $value !== false && $missIndexes - && ( $flags & self::READ_VERIFIED ) == self::READ_VERIFIED + && $this->fieldHasFlags( $flags, self::READ_VERIFIED ) ) { // Backfill the value to the higher (and often faster/smaller) cache tiers $this->doWrite( @@ -346,7 +346,7 @@ class MultiWriteBagOStuff extends BagOStuff { * @return bool */ protected function usesAsyncWritesGivenFlags( $flags ) { - return ( ( $flags & self::WRITE_SYNC ) == self::WRITE_SYNC ) ? false : $this->asyncWrites; + return $this->fieldHasFlags( $flags, self::WRITE_SYNC ) ? false : $this->asyncWrites; } public function makeKeyInternal( $keyspace, $args ) { diff --git a/includes/libs/objectcache/ReplicatedBagOStuff.php b/includes/libs/objectcache/ReplicatedBagOStuff.php index 504d51534e..e3ced0dcf8 100644 --- a/includes/libs/objectcache/ReplicatedBagOStuff.php +++ b/includes/libs/objectcache/ReplicatedBagOStuff.php @@ -76,7 +76,7 @@ class ReplicatedBagOStuff extends BagOStuff { } public function get( $key, $flags = 0 ) { - return ( ( $flags & self::READ_LATEST ) == self::READ_LATEST ) + return $this->fieldHasFlags( $flags, self::READ_LATEST ) ? $this->writeStore->get( $key, $flags ) : $this->readStore->get( $key, $flags ); } @@ -118,7 +118,7 @@ class ReplicatedBagOStuff extends BagOStuff { } public function getMulti( array $keys, $flags = 0 ) { - return ( ( $flags & self::READ_LATEST ) == self::READ_LATEST ) + return $this->fieldHasFlags( $flags, self::READ_LATEST ) ? $this->writeStore->getMulti( $keys, $flags ) : $this->readStore->getMulti( $keys, $flags ); } diff --git a/includes/objectcache/SqlBagOStuff.php b/includes/objectcache/SqlBagOStuff.php index d9fe319277..84051e0ba4 100644 --- a/includes/objectcache/SqlBagOStuff.php +++ b/includes/objectcache/SqlBagOStuff.php @@ -391,7 +391,7 @@ class SqlBagOStuff extends MediumSpecificBagOStuff { } } - if ( ( $flags & self::WRITE_SYNC ) == self::WRITE_SYNC ) { + if ( $this->fieldHasFlags( $flags, self::WRITE_SYNC ) ) { $result = $this->waitForReplication() && $result; } @@ -556,7 +556,7 @@ class SqlBagOStuff extends MediumSpecificBagOStuff { public function merge( $key, callable $callback, $exptime = 0, $attempts = 10, $flags = 0 ) { $ok = $this->mergeViaCas( $key, $callback, $exptime, $attempts, $flags ); - if ( ( $flags & self::WRITE_SYNC ) == self::WRITE_SYNC ) { + if ( $this->fieldHasFlags( $flags, self::WRITE_SYNC ) ) { $ok = $this->waitForReplication() && $ok; }