The workerqueue is now using a view as well

This commit is contained in:
Michael 2020-04-24 18:50:36 +00:00
parent 89dcab774d
commit 1c980c5b29
2 changed files with 12 additions and 5 deletions

View file

@ -684,7 +684,7 @@ class Worker
self::$db_duration_stat += (microtime(true) - $stamp); self::$db_duration_stat += (microtime(true) - $stamp);
while ($entry = DBA::fetch($jobs)) { while ($entry = DBA::fetch($jobs)) {
$stamp = (float)microtime(true); $stamp = (float)microtime(true);
$processes = DBA::p("SELECT COUNT(*) AS `running` FROM `process` INNER JOIN `workerqueue` ON `workerqueue`.`pid` = `process`.`pid` WHERE NOT `done` AND `priority` = ?", $entry["priority"]); $processes = DBA::p("SELECT COUNT(*) AS `running` FROM `workerqueue-view` WHERE `priority` = ?", $entry["priority"]);
self::$db_duration += (microtime(true) - $stamp); self::$db_duration += (microtime(true) - $stamp);
self::$db_duration_stat += (microtime(true) - $stamp); self::$db_duration_stat += (microtime(true) - $stamp);
if ($process = DBA::fetch($processes)) { if ($process = DBA::fetch($processes)) {
@ -698,7 +698,7 @@ class Worker
} else { } else {
$waiting_processes = self::totalEntries(); $waiting_processes = self::totalEntries();
$stamp = (float)microtime(true); $stamp = (float)microtime(true);
$jobs = DBA::p("SELECT COUNT(*) AS `running`, `priority` FROM `process` INNER JOIN `workerqueue` ON `workerqueue`.`pid` = `process`.`pid` AND NOT `done` GROUP BY `priority` ORDER BY `priority`"); $jobs = DBA::p("SELECT COUNT(*) AS `running`, `priority` FROM `workerqueue-view` GROUP BY `priority` ORDER BY `priority`");
self::$db_duration += (microtime(true) - $stamp); self::$db_duration += (microtime(true) - $stamp);
self::$db_duration_stat += (microtime(true) - $stamp); self::$db_duration_stat += (microtime(true) - $stamp);
@ -839,9 +839,7 @@ class Worker
$running = []; $running = [];
$running_total = 0; $running_total = 0;
$stamp = (float)microtime(true); $stamp = (float)microtime(true);
$processes = DBA::p("SELECT COUNT(DISTINCT(`process`.`pid`)) AS `running`, `priority` FROM `process` $processes = DBA::p("SELECT COUNT(DISTINCT(`pid`)) AS `running`, `priority` FROM `workerqueue-view` GROUP BY `priority`");
INNER JOIN `workerqueue` ON `workerqueue`.`pid` = `process`.`pid`
WHERE NOT `done` GROUP BY `priority`");
self::$db_duration += (microtime(true) - $stamp); self::$db_duration += (microtime(true) - $stamp);
while ($process = DBA::fetch($processes)) { while ($process = DBA::fetch($processes)) {
$running[$process['priority']] = $process['running']; $running[$process['priority']] = $process['running'];

View file

@ -209,5 +209,14 @@ return [
INNER JOIN `contact` ON `register`.`uid` = `contact`.`uid` INNER JOIN `contact` ON `register`.`uid` = `contact`.`uid`
INNER JOIN `user` ON `register`.`uid` = `user`.`uid`" INNER JOIN `user` ON `register`.`uid` = `user`.`uid`"
], ],
"workerqueue-view" => [
"fields" => [
"pid" => ["process", "pid"],
"priority" => ["workerqueue", "priority"],
],
"query" => "FROM `process`
INNER JOIN `workerqueue` ON `workerqueue`.`pid` = `process`.`pid`
WHERE NOT `workerqueue`.`done`"
],
]; ];