The `SettingsBuilder` now accepts a PSR-16 cache interface with which to store and query settings before attempting to load from each source. By default, no cache is used, but any object that implements the `Psr\SimpleCache\CacheInterface` may be provided to the constructor. An explicit dependency on "psr/simple-cache" has been added to `composer.json`. Note that this dependency already existed in vendor albeit it as a transitive one. An APCu based `SharedMemoryCache` adapter is provided as a canonical PSR-16 compliant interface for production use. Sources are now queued by the `SettingsBuilder` when calling `load()`. If a cache interface has been provided, and the source is considered cacheable (implements `CacheableSource`), then it is wrapped as a `CachedSource` which will query the cache first before loading from the wrapped source. Cache stampedes are mitigated using probabilistic early expiry. The implementation for this was partially based on symfony/cache-contract source code but also from the Wikipedia article and paper referenced therein. See https://en.wikipedia.org/wiki/Cache_stampede#Probabilistic_early_expiration Bug: T294748 Change-Id: I52ab3899731546876ee58265bd4a1927886746dc
24 lines
385 B
PHP
24 lines
385 B
PHP
<?php
|
|
|
|
namespace MediaWiki\Settings\Source;
|
|
|
|
/**
|
|
* Settings loaded from an array.
|
|
*
|
|
* @since 1.38
|
|
*/
|
|
class ArraySource implements SettingsSource {
|
|
private $settings;
|
|
|
|
public function __construct( array $settings ) {
|
|
$this->settings = $settings;
|
|
}
|
|
|
|
public function load(): array {
|
|
return $this->settings;
|
|
}
|
|
|
|
public function __toString(): string {
|
|
return '<array>';
|
|
}
|
|
}
|