Now we use only dba functions

This commit is contained in:
Michael 2017-11-05 17:13:37 +00:00
parent 70c08dee1d
commit 84c3c0753e
1 changed files with 42 additions and 41 deletions

View File

@ -141,9 +141,9 @@ class Worker {
* @return integer Number of non executed entries in the worker queue
*/
private static function totalEntries() {
$s = q("SELECT COUNT(*) AS `total` FROM `workerqueue` WHERE `executed` <= '%s' AND NOT `done`", dbesc(NULL_DATE));
$s = dba::fetch_first("SELECT COUNT(*) AS `total` FROM `workerqueue` WHERE `executed` <= ? AND NOT `done`", NULL_DATE);
if (dbm::is_result($s)) {
return $s[0]["total"];
return $s["total"];
} else {
return 0;
}
@ -155,9 +155,10 @@ class Worker {
* @return integer Number of active poller processes
*/
private static function highestPriority() {
$s = q("SELECT `priority` FROM `workerqueue` WHERE `executed` <= '%s' AND NOT `done` ORDER BY `priority` LIMIT 1", dbesc(NULL_DATE));
$condition = array("`executed` <= ? AND NOT `done`", NULL_DATE);
$s = dba::select('workerqueue', array('priority'), $condition, array('limit' => 1, 'order' => array('priority')));
if (dbm::is_result($s)) {
return $s[0]["priority"];
return $s["priority"];
} else {
return 0;
}
@ -171,9 +172,8 @@ class Worker {
* @return integer Is there a process running with that priority?
*/
private static function processWithPriorityActive($priority) {
$s = q("SELECT `id` FROM `workerqueue` WHERE `priority` <= %d AND `executed` > '%s' AND NOT `done` LIMIT 1",
intval($priority), dbesc(NULL_DATE));
return dbm::is_result($s);
$condition = array("`priority` <= ? AND `executed` > ? AND NOT `done`", $priority, NULL_DATE);
return dba::exists('workerqueue', $condition);
}
/**
@ -404,32 +404,29 @@ class Worker {
if ($max == 0) {
// the maximum number of possible user connections can be a system variable
$r = q("SHOW VARIABLES WHERE `variable_name` = 'max_user_connections'");
$r = dba::fetch_first("SHOW VARIABLES WHERE `variable_name` = 'max_user_connections'");
if (dbm::is_result($r)) {
$max = $r[0]["Value"];
$max = $r["Value"];
}
// Or it can be granted. This overrides the system variable
$r = q("SHOW GRANTS");
if (dbm::is_result($r)) {
foreach ($r AS $grants) {
$grant = array_pop($grants);
if (stristr($grant, "GRANT USAGE ON")) {
if (preg_match("/WITH MAX_USER_CONNECTIONS (\d*)/", $grant, $match)) {
$max = $match[1];
}
$r = dba::p('SHOW GRANTS');
while ($grants = dba::fetch($r)) {
$grant = array_pop($grants);
if (stristr($grant, "GRANT USAGE ON")) {
if (preg_match("/WITH MAX_USER_CONNECTIONS (\d*)/", $grant, $match)) {
$max = $match[1];
}
}
}
dba::close($r);
}
// If $max is set we will use the processlist to determine the current number of connections
// The processlist only shows entries of the current user
if ($max != 0) {
$r = q("SHOW PROCESSLIST");
if (!dbm::is_result($r)) {
return false;
}
$used = count($r);
$r = dba::p('SHOW PROCESSLIST');
$used = dba::num_rows($r);
dba::close($r);
logger("Connection usage (user values): ".$used."/".$max, LOGGER_DEBUG);
@ -443,19 +440,19 @@ class Worker {
// We will now check for the system values.
// This limit could be reached although the user limits are fine.
$r = q("SHOW VARIABLES WHERE `variable_name` = 'max_connections'");
$r = dba::fetch_first("SHOW VARIABLES WHERE `variable_name` = 'max_connections'");
if (!dbm::is_result($r)) {
return false;
}
$max = intval($r[0]["Value"]);
$max = intval($r["Value"]);
if ($max == 0) {
return false;
}
$r = q("SHOW STATUS WHERE `variable_name` = 'Threads_connected'");
$r = dba::fetch_first("SHOW STATUS WHERE `variable_name` = 'Threads_connected'");
if (!dbm::is_result($r)) {
return false;
}
$used = intval($r[0]["Value"]);
$used = intval($r["Value"]);
if ($used == 0) {
return false;
}
@ -612,9 +609,9 @@ class Worker {
* @return integer Number of active poller processes
*/
private static function activeWorkers() {
$workers = q("SELECT COUNT(*) AS `processes` FROM `process` WHERE `command` = 'Worker.php'");
$workers = dba::fetch_first("SELECT COUNT(*) AS `processes` FROM `process` WHERE `command` = 'Worker.php'");
return $workers[0]["processes"];
return $workers["processes"];
}
/**
@ -627,21 +624,22 @@ class Worker {
* @return bool We let pass a slower process than $highest_priority
*/
private static function passingSlow(&$highest_priority) {
$highest_priority = 0;
$r = q("SELECT `priority`
FROM `process`
INNER JOIN `workerqueue` ON `workerqueue`.`pid` = `process`.`pid` AND NOT `done`");
$r = dba::p("SELECT `priority`
FROM `process`
INNER JOIN `workerqueue` ON `workerqueue`.`pid` = `process`.`pid` AND NOT `done`");
// No active processes at all? Fine
if (!dbm::is_result($r)) {
return false;
}
$priorities = array();
foreach ($r AS $line) {
while ($line = dba::fetch($r)) {
$priorities[] = $line["priority"];
}
dba::close($r);
// Should not happen
if (count($priorities) == 0) {
return false;
@ -755,11 +753,12 @@ class Worker {
$stamp = (float)microtime(true);
// There can already be jobs for us in the queue.
$r = q("SELECT * FROM `workerqueue` WHERE `pid` = %d AND NOT `done`", intval(getmypid()));
$r = dba::select('workerqueue', array(), array('pid' => getmypid(), 'done' => false));
if (dbm::is_result($r)) {
self::$db_duration += (microtime(true) - $stamp);
return $r;
return dba::inArray($r);
}
dba::close($r);
$stamp = (float)microtime(true);
if (!Lock::set('poller_worker_process')) {
@ -774,9 +773,10 @@ class Worker {
Lock::remove('poller_worker_process');
if ($found) {
$r = q("SELECT * FROM `workerqueue` WHERE `pid` = %d AND NOT `done`", intval(getmypid()));
$r = dba::select('workerqueue', array(), array('pid' => getmypid(), 'done' => false));
return dba::inArray($r);
}
return $r;
return false;
}
/**
@ -841,9 +841,9 @@ class Worker {
self::clearProcesses();
$workers = q("SELECT COUNT(*) AS `processes` FROM `process` WHERE `command` = 'worker.php'");
$workers = dba::fetch_first("SELECT COUNT(*) AS `processes` FROM `process` WHERE `command` = 'worker.php'");
if ($workers[0]["processes"] == 0) {
if ($workers["processes"] == 0) {
self::callWorker();
}
}
@ -855,8 +855,9 @@ class Worker {
$timeout = Config::get("system", "frontend_worker_timeout", 10);
/// @todo We should clean up the corresponding workerqueue entries as well
q("DELETE FROM `process` WHERE `created` < '%s' AND `command` = 'worker.php'",
dbesc(datetime_convert('UTC','UTC',"now - ".$timeout." minutes")));
$condition = array("`created` < ? AND `command` = 'worker.php'",
datetime_convert('UTC','UTC',"now - ".$timeout." minutes"));
dba::delete('process', $condition);
}
/**