* @since 1.19
*/
abstract class FileBackendStore extends FileBackend {
- /** @var BagOStuff */
+ /** @var WANObjectCache */
protected $memCache;
/** @var ProcessCacheLRU Map of paths to small (RAM/disk) cache items */
protected $cheapCache;
/**
* @see FileBackend::__construct()
* Additional $config params include:
+ * - wanCache : WANOBjectCache object to use for persistent caching.
* - mimeCallback : Callback that takes (storage path, content, file system path) and
* returns the MIME type of the file or 'unknown/unknown'. The file
* system path parameter should be used if the content one is null.
// @todo handle the case of extension-less files using the contents
return StreamFile::contentTypeFromPath( $storagePath ) ?: 'unknown/unknown';
};
- $this->memCache = new EmptyBagOStuff(); // disabled by default
+ $this->memCache = WANObjectCache::newEmpty(); // disabled by default
$this->cheapCache = new ProcessCacheLRU( self::CACHE_CHEAP_SIZE );
$this->expensiveCache = new ProcessCacheLRU( self::CACHE_EXPENSIVE_SIZE );
}
* @param array $val Information to cache
*/
final protected function setContainerCache( $container, array $val ) {
- $this->memCache->add( $this->containerCacheKey( $container ), $val, 14 * 86400 );
+ $this->memCache->set( $this->containerCacheKey( $container ), $val, 14 * 86400 );
}
/**
* @param string $container Resolved container name
*/
final protected function deleteContainerCache( $container ) {
- if ( !$this->memCache->set( $this->containerCacheKey( $container ), 'PURGED', 300 ) ) {
+ if ( !$this->memCache->delete( $this->containerCacheKey( $container ), 300 ) ) {
trigger_error( "Unable to delete stat cache for container $container." );
}
}
$age = time() - wfTimestamp( TS_UNIX, $val['mtime'] );
$ttl = min( 7 * 86400, max( 300, floor( .1 * $age ) ) );
$key = $this->fileCacheKey( $path );
- // Set the cache unless it is currently salted with the value "PURGED".
- // Using add() handles this except it also is a no-op in that case where
- // the current value is not "latest" but $val is, so use CAS in that case.
- if ( !$this->memCache->add( $key, $val, $ttl ) && !empty( $val['latest'] ) ) {
- $this->memCache->merge(
- $key,
- function ( BagOStuff $cache, $key, $cValue ) use ( $val ) {
- return ( is_array( $cValue ) && empty( $cValue['latest'] ) )
- ? $val // update the stat cache with the lastest info
- : false; // do nothing (cache is salted or some error happened)
- },
- $ttl,
- 1
- );
- }
+ // Set the cache unless it is currently salted.
+ $this->memCache->set( $key, $val, $ttl );
}
/**
if ( $path === null ) {
return; // invalid storage path
}
- if ( !$this->memCache->set( $this->fileCacheKey( $path ), 'PURGED', 300 ) ) {
+ if ( !$this->memCache->delete( $this->fileCacheKey( $path ), 300 ) ) {
trigger_error( "Unable to delete stat cache for file $path." );
}
}