protected function validateRecord($validation, &$record)
{
$invalidation = Invalidation::PRECOMPUTE;
if (is_array($validation)) {
$argArray = $validation;
$invalidation = isset($argArray[0]) ? $argArray[0] : Invalidation::PRECOMPUTE;
if (isset($argArray[1])) {
$arg = $argArray[1];
}
if (isset($argArray[2])) {
$arg2 = $argArray[2];
}
}
$curTime = microtime(true);
if (isset($record['expiration']) && ($ttl = $record['expiration'] - $curTime) > 0) {
$this->isHit = true;
if ($invalidation == Invalidation::PRECOMPUTE) {
$time = isset($arg) && is_numeric($arg) ? $arg : $this->defaults['precompute_time'];
// If stampede control is on it means another cache is already processing, so we return
// true for the hit.
if ($ttl < $time) {
$this->isHit = (bool) $this->getStampedeFlag($this->key);
}
}
return;
}
if (!isset($invalidation) || $invalidation == Invalidation::NONE) {
$this->isHit = false;
return;
}
if (!$this->getStampedeFlag($this->key)) {
$this->isHit = false;
return;
}
switch ($invalidation) {
case Invalidation::VALUE:
if (!isset($arg)) {
$this->isHit = false;
return;
} else {
$record['data']['return'] = $arg;
$this->isHit = true;
}
break;
case Invalidation::SLEEP:
$time = isset($arg) && is_numeric($arg) ? $arg : $this->defaults['sleep_time'];
$attempts = isset($arg2) && is_numeric($arg2) ? $arg2 : $this->defaults['sleep_attempts'];
$ptime = $time * 1000;
if ($attempts <= 0) {
$this->isHit = false;
$record['data']['return'] = null;
break;
}
usleep($ptime);
$record['data']['return'] = $this->executeGet(Invalidation::SLEEP, $time, $attempts - 1);
break;
case Invalidation::OLD:
$this->isHit = isset($record['data']) && $record['data']['return'] !== null;
break;
default:
$this->isHit = false;
break;
}
// switch($invalidate)
}