objectcache: check apc.serializer in APCBagOStuff like APCUBagOStuff
authorAaron Schulz <aschulz@wikimedia.org>
Wed, 22 May 2019 16:58:10 +0000 (09:58 -0700)
committerAaron Schulz <aschulz@wikimedia.org>
Wed, 22 May 2019 16:58:30 +0000 (09:58 -0700)
This mirrors a1389b602411

Change-Id: Iad6b104337dfd38c74f363ce76c36aedcc3da425

includes/libs/objectcache/APCBagOStuff.php
includes/libs/objectcache/APCUBagOStuff.php

index 9a5a433..5a36c65 100644 (file)
  * @ingroup Cache
  */
 class APCBagOStuff extends BagOStuff {
+       /** @var bool Whether to trust the APC implementation to serialization */
+       private $nativeSerialize;
+
        /**
         * @var string String to append to each APC key. This may be changed
         *  whenever the handling of values is changed, to prevent existing code
         *  from encountering older values which it cannot handle.
         */
-       const KEY_SUFFIX = ':3';
+       const KEY_SUFFIX = ':4';
+
+       public function __construct( array $params = [] ) {
+               parent::__construct( $params );
+               // The extension serializer is still buggy, unlike "php" and "igbinary"
+               $this->nativeSerialize = ( ini_get( 'apc.serializer' ) !== 'default' );
+       }
 
        protected function doGet( $key, $flags = 0, &$casToken = null ) {
                $casToken = null;
 
                $blob = apc_fetch( $key . self::KEY_SUFFIX );
-               $value = $this->unserialize( $blob );
+               $value = $this->nativeSerialize ? $blob : $this->unserialize( $blob );
                if ( $value !== false ) {
                        $casToken = $blob; // don't bother hashing this
                }
@@ -56,7 +65,7 @@ class APCBagOStuff extends BagOStuff {
        public function set( $key, $value, $exptime = 0, $flags = 0 ) {
                apc_store(
                        $key . self::KEY_SUFFIX,
-                       $this->serialize( $value ),
+                       $this->nativeSerialize ? $value : $this->serialize( $value ),
                        $exptime
                );
 
@@ -66,7 +75,7 @@ class APCBagOStuff extends BagOStuff {
        public function add( $key, $value, $exptime = 0, $flags = 0 ) {
                return apc_add(
                        $key . self::KEY_SUFFIX,
-                       $this->serialize( $value ),
+                       $this->nativeSerialize ? $value : $this->serialize( $value ),
                        $exptime
                );
        }
index eba0af5..0d9822a 100644 (file)
@@ -46,7 +46,7 @@ class APCUBagOStuff extends BagOStuff {
 
        public function __construct( array $params = [] ) {
                parent::__construct( $params );
-               // The extension serialize is still buggy, unlike "php" and "igbinary"
+               // The extension serializer is still buggy, unlike "php" and "igbinary"
                $this->nativeSerialize = ( ini_get( 'apc.serializer' ) !== 'default' );
        }