getPriv('SCHEDULE_KEY')) && !check_perms('admin_schedule')) { // auth fix to let people with perms hit this page error(403); } if (check_perms('admin_schedule')) { View::show_header(); echo '
';
}
ignore_user_abort();
ini_set('max_execution_time', 300);
ob_end_flush();
gc_enable();
$Cache->InternalCache = false; // We don't want PHP to cache all results internally
$DB->query("TRUNCATE TABLE torrents_peerlists_compare");
$DB->query("
INSERT INTO torrents_peerlists_compare
SELECT ID, GroupID, Seeders, Leechers, Snatched
FROM torrents
ON DUPLICATE KEY UPDATE
Seeders = VALUES(Seeders),
Leechers = VALUES(Leechers),
Snatches = VALUES(Snatches)");
$DB->query("
CREATE TEMPORARY TABLE tpc_temp
(TorrentID int, GroupID int, Seeders int, Leechers int, Snatched int,
PRIMARY KEY (GroupID, TorrentID))");
$DB->query("
INSERT INTO tpc_temp
SELECT t2.*
FROM torrents_peerlists AS t1
JOIN torrents_peerlists_compare AS t2
USING(TorrentID)
WHERE t1.Seeders != t2.Seeders
OR t1.Leechers != t2.Leechers
OR t1.Snatches != t2.Snatches");
$StepSize = 30000;
$DB->query("
SELECT *
FROM tpc_temp
ORDER BY GroupID ASC, TorrentID ASC
LIMIT $StepSize");
$RowNum = 0;
$LastGroupID = 0;
$UpdatedKeys = $UncachedGroups = 0;
list($TorrentID, $GroupID, $Seeders, $Leechers, $Snatches) = $DB->next_record(MYSQLI_NUM, false);
while ($TorrentID) {
if ($LastGroupID != $GroupID) {
$CachedData = $Cache->get_value("torrent_group_$GroupID");
if ($CachedData !== false) {
if (isset($CachedData['ver']) && $CachedData['ver'] == Cache::GROUP_VERSION) {
$CachedStats = &$CachedData['d']['Torrents'];
}
} else {
$UncachedGroups++;
}
$LastGroupID = $GroupID;
}
while ($LastGroupID == $GroupID) {
$RowNum++;
if (isset($CachedStats) && is_array($CachedStats[$TorrentID])) {
$OldValues = &$CachedStats[$TorrentID];
$OldValues['Seeders'] = $Seeders;
$OldValues['Leechers'] = $Leechers;
$OldValues['Snatched'] = $Snatches;
$Changed = true;
unset($OldValues);
}
if (!($RowNum % $StepSize)) {
$DB->query("
SELECT *
FROM tpc_temp
WHERE GroupID > $GroupID
OR (GroupID = $GroupID AND TorrentID > $TorrentID)
ORDER BY GroupID ASC, TorrentID ASC
LIMIT $StepSize");
}
$LastGroupID = $GroupID;
list($TorrentID, $GroupID, $Seeders, $Leechers, $Snatches) = $DB->next_record(MYSQLI_NUM, false);
}
if ($Changed) {
$Cache->cache_value("torrent_group_$LastGroupID", $CachedData, 0);
unset($CachedStats);
$UpdatedKeys++;
$Changed = false;
}
}
printf("Updated %d keys, skipped %d keys in %.6fs (%d kB memory)\n", $UpdatedKeys, $UncachedGroups, microtime(true) - $ScriptStartTime, memory_get_usage(true) >> 10);
$DB->query("TRUNCATE TABLE torrents_peerlists");
$DB->query("
INSERT INTO torrents_peerlists
SELECT *
FROM torrents_peerlists_compare");
if (check_perms('admin_schedule')) {
echo '';
View::show_footer();
}