X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Flibs%2Fobjectcache%2FWANObjectCache.php;h=658b225b44fed3b49cadbdd852ab362871e94741;hp=bcd95c1c200f17e1464c375e1d2c5629748d2806;hb=631e8695b15412ec16c31623cbd6e5aa3d6efb1e;hpb=f3f7fc5e0e0070323a9c7199e52119691a6e9f00 diff --git a/includes/libs/objectcache/WANObjectCache.php b/includes/libs/objectcache/WANObjectCache.php index bcd95c1c20..658b225b44 100644 --- a/includes/libs/objectcache/WANObjectCache.php +++ b/includes/libs/objectcache/WANObjectCache.php @@ -118,6 +118,9 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface { /** @var int Key fetched */ private $warmupKeyMisses = 0; + /** @var float|null */ + private $wallClockOverride; + /** Max time expected to pass between delete() and DB commit finishing */ const MAX_COMMIT_DELAY = 3; /** Max replication+snapshot lag before applying TTL_LAGGED or disallowing set() */ @@ -517,18 +520,18 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface { // Case B: any long-running transaction; ignore this set() } elseif ( $age > self::MAX_READ_LAG ) { $this->logger->info( 'Rejected set() for {cachekey} due to snapshot lag.', - [ 'cachekey' => $key ] ); + [ 'cachekey' => $key, 'lag' => $lag, 'age' => $age ] ); return true; // no-op the write for being unsafe // Case C: high replication lag; lower TTL instead of ignoring all set()s } elseif ( $lag === false || $lag > self::MAX_READ_LAG ) { $ttl = $ttl ? min( $ttl, self::TTL_LAGGED ) : self::TTL_LAGGED; $this->logger->warning( 'Lowered set() TTL for {cachekey} due to replication lag.', - [ 'cachekey' => $key ] ); + [ 'cachekey' => $key, 'lag' => $lag, 'age' => $age ] ); // Case D: medium length request with medium replication lag; ignore this set() } else { $this->logger->info( 'Rejected set() for {cachekey} due to high read lag.', - [ 'cachekey' => $key ] ); + [ 'cachekey' => $key, 'lag' => $lag, 'age' => $age ] ); return true; // no-op the write for being unsafe } @@ -2064,14 +2067,6 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface { return isset( $parts[1] ) ? $parts[1] : $parts[0]; // sanity } - /** - * @return float UNIX timestamp - * @codeCoverageIgnore - */ - protected function getCurrentTime() { - return microtime( true ); - } - /** * @param string $value Wrapped value like "PURGED::" * @return array|bool Array containing a UNIX timestamp (float) and holdoff period (integer), @@ -2173,4 +2168,21 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface { return $warmupCache; } + + /** + * @return float UNIX timestamp + * @codeCoverageIgnore + */ + protected function getCurrentTime() { + return $this->wallClockOverride ?: microtime( true ); + } + + /** + * @param float|null &$time Mock UNIX timestamp for testing + * @codeCoverageIgnore + */ + public function setMockTime( &$time ) { + $this->wallClockOverride =& $time; + $this->cache->setMockTime( $time ); + } }