objectcache: avoid using heavily time-drifted microtime() values in WAN cache
Change-Id: Ifcb9e4b4a1d5adfdaaa6ea505e34956516b871de
This commit is contained in:
parent
90451ed2bf
commit
d2c2bf6553
1 changed files with 11 additions and 1 deletions
|
|
@ -2225,7 +2225,17 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
|
|||
* @codeCoverageIgnore
|
||||
*/
|
||||
protected function getCurrentTime() {
|
||||
return $this->wallClockOverride ?: microtime( true );
|
||||
if ( $this->wallClockOverride ) {
|
||||
return $this->wallClockOverride;
|
||||
}
|
||||
|
||||
$clockTime = (float)time(); // call this first
|
||||
// microtime() uses an initial gettimeofday() call added to usage clocks.
|
||||
// This can severely drift from time() and the microtime() value of other threads
|
||||
// due to undercounting of the amount of time elapsed. Instead of seeing the current
|
||||
// time as being in the past, use the value of time(). This avoids setting cache values
|
||||
// that will immediately be seen as expired and possibly cause stampedes.
|
||||
return max( microtime( true ), $clockTime );
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue