- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/data/cacheenginefiles.php
- Класс: BitrixMainDataCacheEngineFiles
- Вызов: CacheEngineFiles::delayedDelete
static function delayedDelete($count = 1)
{
$con = MainApplication::getConnection();
$etime = time() + 2;
if ($count > 0)
{
$rs = $con->query("SELECT * from b_cache_tag WHERE TAG='*'", 0, $count);
while ($ar = $rs->fetch())
{
static::deleteOneDir($etime, $ar);
if (time() > $etime)
break;
}
}
//try to adjust cache cleanup speed to cache cleanups
$rs = $con->query("SELECT SITE_ID, CACHE_SALT, RELATIVE_PATH, TAG from b_cache_tag WHERE TAG='**'");
if ($ar = $rs->fetch())
{
$statRecFound = true;
$lastCount = intval($ar["RELATIVE_PATH"]);
if (preg_match("/:(\d+)$/", $ar["RELATIVE_PATH"], $m))
$lastTime = intval($m[1]);
else
$lastTime = 0;
}
else
{
$statRecFound = false;
$lastCount = 0;
$lastTime = 0;
}
$toDeleteCount = $con->queryScalar("SELECT count(1) CNT from b_cache_tag WHERE TAG='*'");
$delta = $toDeleteCount - $lastCount;
if ($delta > 0)
{
$timeStep = ($lastTime > 0? time() - $lastTime: 0);
if ($timeStep <= 0)
$timeStep = 1;
$count = intval($toDeleteCount * $timeStep / 3600) + 1; //Rest of the queue in an hour
}
elseif ($count < 1)
{
$count = 1;
}
if ($statRecFound)
{
if ($lastCount != $toDeleteCount)
$con->queryExecute("UPDATE b_cache_tag SET RELATIVE_PATH='".$toDeleteCount.":".time()."' WHERE TAG='**'");
}
else
{
$con->queryExecute("INSERT INTO b_cache_tag (TAG, RELATIVE_PATH) VALUES ('**', '".$toDeleteCount.":".time()."')");
}
if ($toDeleteCount > 0)
return "\Bitrix\Main\Data\CacheEngineFiles::delayedDelete(".$count.");";
else
return "";
}