Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
n/a
0 / 0
n/a
0 / 0
CRAP
n/a
0 / 0
1<?php
2
3namespace MediaWiki\Settings\Cache;
4
5use MediaWiki\Settings\Source\SettingsSource;
6
7/**
8 * A {@link SettingsSource} that can be cached. It must return a unique
9 * (enough) and deterministic hash key for cache indexing.
10 *
11 * @since 1.38
12 * @stable to implement
13 */
14interface CacheableSource extends SettingsSource {
15    /**
16     * Allow the caching layer to attempt to return stale results in the event
17     * that loading from the original source fails.
18     *
19     * Note that allowing stale results will result in cache items being
20     * stored indefinitely regardless of the {@link getExpiryTtl()} value, and
21     * since there is currently no pruning of cache items, it is advised that
22     * sources allowing stale results also implement an immutable
23     * `getHashKey()` based only on constructor arguments.
24     *
25     * @return bool
26     */
27    public function allowsStaleLoad(): bool;
28
29    /**
30     * Returns the cache TTL (in seconds) for this source.
31     *
32     * @return int
33     */
34    public function getExpiryTtl(): int;
35
36    /**
37     * Coefficient used in determining early expiration of cached settings to
38     * avoid stampedes.
39     *
40     * Increasing this value will cause the random early election to happen by
41     * a larger margin of lead time before normal expiry, relative to the
42     * cache value's generation duration. Conversely, returning a lesser value
43     * will narrow the margin of lead time, making the cache hold items for
44     * slightly longer but with more likelihood that concurrent regenerations
45     * and set overwrites will occur. Returning <code>0</code> will
46     * effectively disable early expiration, and by extension disable stampede
47     * mitigation altogether.
48     *
49     * A greater value may be suitable if a source has a highly variable
50     * generation duration, but most implementations should simply return
51     * <code>1.0</code>.
52     *
53     * @link https://en.wikipedia.org/wiki/Cache_stampede#Probabilistic_early_expiration
54     * @link https://cseweb.ucsd.edu/~avattani/papers/cache_stampede.pdf
55     *
56     * Optimal Probabilistic Cache Stampede Prevention
57     * Vattani, A.; Chierichetti, F.; Lowenstein, K. (2015), "Optimal
58     * Probabilistic Cache Stampede Prevention" (PDF), Proceedings of the VLDB
59     * Endowment, VLDB, 8 (8): 886–897, doi:10.14778/2757807.2757813, ISSN
60     * 2150-8097 https://cseweb.ucsd.edu/~avattani/papers/cache_stampede.pdf
61     *
62     * @return float
63     */
64    public function getExpiryWeight(): float;
65
66    /**
67     * Returns a deterministically computed key for use in caching settings
68     * from this source.
69     *
70     * @return string
71     */
72    public function getHashKey(): string;
73}