dba functions in poller / avoiding SQL errors in conversation / dbclean is better

This commit is contained in:
Michael 2017-05-12 16:09:25 +00:00
parent acd9f453d7
commit 377fe31907
3 changed files with 37 additions and 36 deletions

View File

@ -18,13 +18,11 @@ function dbclean_run(&$argv, &$argc) {
}
if ($stage == 0) {
proc_run(PRIORITY_LOW, 'include/dbclean.php', 1);
proc_run(PRIORITY_LOW, 'include/dbclean.php', 2);
proc_run(PRIORITY_LOW, 'include/dbclean.php', 3);
proc_run(PRIORITY_LOW, 'include/dbclean.php', 4);
proc_run(PRIORITY_LOW, 'include/dbclean.php', 5);
proc_run(PRIORITY_LOW, 'include/dbclean.php', 6);
proc_run(PRIORITY_LOW, 'include/dbclean.php', 7);
for ($i = 1; $i <= 7; $i++) {
if (!Config::get('system', 'finished-dbclean-'.$i)) {
proc_run(PRIORITY_LOW, 'include/dbclean.php', $i);
}
}
} else {
remove_orphans($stage);
}
@ -54,6 +52,9 @@ function remove_orphans($stage = 0) {
}
} else {
logger("No global item orphans found");
// We will eventually set this value when we found a good way to delete these items in another way.
// Config::set('system', 'finished-dbclean-1', true);
}
dba::close($r);
logger("Done deleting ".$count." old global item entries from item table without user copy");
@ -68,6 +69,7 @@ function remove_orphans($stage = 0) {
}
} else {
logger("No item orphans without parents found");
Config::set('system', 'finished-dbclean-2', true);
}
dba::close($r);
logger("Done deleting ".$count." items without parents");
@ -82,6 +84,7 @@ function remove_orphans($stage = 0) {
}
} else {
logger("No thread orphans found");
Config::set('system', 'finished-dbclean-3', true);
}
dba::close($r);
@ -97,6 +100,7 @@ function remove_orphans($stage = 0) {
}
} else {
logger("No notify orphans found");
Config::set('system', 'finished-dbclean-4', true);
}
dba::close($r);
logger("Done deleting ".$count." orphaned data from notify table");
@ -111,6 +115,7 @@ function remove_orphans($stage = 0) {
}
} else {
logger("No notify-threads orphans found");
Config::set('system', 'finished-dbclean-5', true);
}
dba::close($r);
logger("Done deleting ".$count." orphaned data from notify-threads table");
@ -125,6 +130,7 @@ function remove_orphans($stage = 0) {
}
} else {
logger("No sign orphans found");
Config::set('system', 'finished-dbclean-6', true);
}
dba::close($r);
logger("Done deleting ".$count." orphaned data from sign table");
@ -139,6 +145,7 @@ function remove_orphans($stage = 0) {
}
} else {
logger("No term orphans found");
Config::set('system', 'finished-dbclean-7', true);
}
dba::close($r);
logger("Done deleting ".$count." orphaned data from term table");

View File

@ -501,6 +501,20 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
}
}
if ($notify) {
$guid_prefix = "";
} elseif ((trim($arr['guid']) == "") AND (trim($arr['plink']) != "")) {
$arr['guid'] = uri_to_guid($arr['plink']);
} elseif ((trim($arr['guid']) == "") AND (trim($arr['uri']) != "")) {
$arr['guid'] = uri_to_guid($arr['uri']);
} else {
$parsed = parse_url($arr["author-link"]);
$guid_prefix = hash("crc32", $parsed["host"]);
}
$arr['guid'] = ((x($arr, 'guid')) ? notags(trim($arr['guid'])) : get_guid(32, $guid_prefix));
$arr['uri'] = ((x($arr, 'uri')) ? notags(trim($arr['uri'])) : item_new_uri($a->get_hostname(), $uid, $arr['guid']));
// Store conversation data
$arr = store_conversation($arr);
@ -585,20 +599,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
item_add_language_opt($arr);
if ($notify) {
$guid_prefix = "";
} elseif ((trim($arr['guid']) == "") AND (trim($arr['plink']) != "")) {
$arr['guid'] = uri_to_guid($arr['plink']);
} elseif ((trim($arr['guid']) == "") AND (trim($arr['uri']) != "")) {
$arr['guid'] = uri_to_guid($arr['uri']);
} else {
$parsed = parse_url($arr["author-link"]);
$guid_prefix = hash("crc32", $parsed["host"]);
}
$arr['wall'] = ((x($arr, 'wall')) ? intval($arr['wall']) : 0);
$arr['guid'] = ((x($arr, 'guid')) ? notags(trim($arr['guid'])) : get_guid(32, $guid_prefix));
$arr['uri'] = ((x($arr, 'uri')) ? notags(trim($arr['uri'])) : item_new_uri($a->get_hostname(), $uid, $arr['guid']));
$arr['extid'] = ((x($arr, 'extid')) ? notags(trim($arr['extid'])) : '');
$arr['author-name'] = ((x($arr, 'author-name')) ? trim($arr['author-name']) : '');
$arr['author-link'] = ((x($arr, 'author-link')) ? notags(trim($arr['author-link'])) : '');

View File

@ -121,12 +121,8 @@ function poller_execute($queue) {
return false;
}
$upd = q("UPDATE `workerqueue` SET `executed` = '%s', `pid` = %d WHERE `id` = %d AND `pid` = 0",
dbesc(datetime_convert()),
intval($mypid),
intval($queue["id"]));
if (!$upd) {
if (!dba::update('workerqueue', array('executed' => datetime_convert(), 'pid' => $mypid),
array('id' => $queue["id"], 'pid' => 0))) {
logger("Couldn't update queue entry ".$queue["id"]." - skip this execution", LOGGER_DEBUG);
dba::commit();
return true;
@ -156,7 +152,7 @@ function poller_execute($queue) {
if (!validate_include($include)) {
logger("Include file ".$argv[0]." is not valid!");
q("DELETE FROM `workerqueue` WHERE `id` = %d", intval($queue["id"]));
dba::delete('workerqueue', array('id' => $queue["id"]));
return true;
}
@ -168,7 +164,7 @@ function poller_execute($queue) {
poller_exec_function($queue, $funcname, $argv);
q("DELETE FROM `workerqueue` WHERE `id` = %d", intval($queue["id"]));
dba::delete('workerqueue', array('id' => $queue["id"]));
} else {
logger("Function ".$funcname." does not exist");
}
@ -376,8 +372,8 @@ function poller_kill_stale_workers() {
foreach ($r AS $pid) {
if (!posix_kill($pid["pid"], 0)) {
q("UPDATE `workerqueue` SET `executed` = '%s', `pid` = 0 WHERE `pid` = %d",
dbesc(NULL_DATE), intval($pid["pid"]));
dba::update('workerqueue', array('executed' => NULL_DATE, 'pid' => 0),
array('pid' => $pid["pid"]));
} else {
// Kill long running processes
@ -401,12 +397,9 @@ function poller_kill_stale_workers() {
// We killed the stale process.
// To avoid a blocking situation we reschedule the process at the beginning of the queue.
// Additionally we are lowering the priority.
q("UPDATE `workerqueue` SET `executed` = '%s', `created` = '%s',
`priority` = %d, `pid` = 0 WHERE `pid` = %d",
dbesc(NULL_DATE),
dbesc(datetime_convert()),
intval(PRIORITY_NEGLIGIBLE),
intval($pid["pid"]));
dba::update('workerqueue',
array('executed' => NULL_DATE, 'created' => datetime_convert(), 'priority' => PRIORITY_NEGLIGIBLE, 'pid' => 0),
array('pid' => $pid["pid"]));
} else {
logger("Worker process ".$pid["pid"]." (".implode(" ", $argv).") now runs for ".round($duration)." of ".$max_duration." allowed minutes. That's okay.", LOGGER_DEBUG);
}