Merge pull request #2404 from annando/1603-no-lock
Don't create lock files if the process is called from the poller
This commit is contained in:
commit
60a01242ea
11 changed files with 142 additions and 180 deletions
51
boot.php
51
boot.php
|
@ -30,7 +30,7 @@ require_once('include/cache.php');
|
|||
require_once('library/Mobile_Detect/Mobile_Detect.php');
|
||||
require_once('include/features.php');
|
||||
require_once('include/identity.php');
|
||||
|
||||
require_once('include/pidfile.php');
|
||||
require_once('update.php');
|
||||
require_once('include/dbstructure.php');
|
||||
|
||||
|
@ -1098,6 +1098,55 @@ class App {
|
|||
return($this->is_friendica_app);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Checks if the maximum load is reached
|
||||
*
|
||||
* @return bool Is the load reached?
|
||||
*/
|
||||
function maxload_reached() {
|
||||
|
||||
$maxsysload = intval(get_config('system', 'maxloadavg'));
|
||||
if ($maxsysload < 1)
|
||||
$maxsysload = 50;
|
||||
|
||||
$load = current_load();
|
||||
if ($load) {
|
||||
if (intval($load) > $maxsysload) {
|
||||
logger('system: load '.$load.' too high.');
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Checks if the process is already running
|
||||
*
|
||||
* @param string $taskname The name of the task that will be used for the name of the lockfile
|
||||
* @param string $task The path and name of the php script
|
||||
* @param int $timeout The timeout after which a task should be killed
|
||||
*
|
||||
* @return bool Is the process running?
|
||||
*/
|
||||
function is_already_running($taskname, $task = "", $timeout = 540) {
|
||||
|
||||
$lockpath = get_lockpath();
|
||||
if ($lockpath != '') {
|
||||
$pidfile = new pidfile($lockpath, $taskname);
|
||||
if ($pidfile->is_already_running()) {
|
||||
logger("Already running");
|
||||
if ($pidfile->running_time() > $timeout) {
|
||||
$pidfile->kill();
|
||||
logger("killed stale process");
|
||||
// Calling a new instance
|
||||
if ($task != "")
|
||||
proc_run('php', $task);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -34,22 +34,17 @@ function cron_run(&$argv, &$argc){
|
|||
require_once('include/Contact.php');
|
||||
require_once('include/email.php');
|
||||
require_once('include/socgraph.php');
|
||||
require_once('include/pidfile.php');
|
||||
require_once('mod/nodeinfo.php');
|
||||
|
||||
load_config('config');
|
||||
load_config('system');
|
||||
|
||||
$maxsysload = intval(get_config('system','maxloadavg'));
|
||||
if($maxsysload < 1)
|
||||
$maxsysload = 50;
|
||||
|
||||
$load = current_load();
|
||||
if($load) {
|
||||
if(intval($load) > $maxsysload) {
|
||||
logger('system: load ' . $load . ' too high. cron deferred to next scheduled run.');
|
||||
// Don't check this stuff if the function is called by the poller
|
||||
if (App::callstack() != "poller_run") {
|
||||
if (App::maxload_reached())
|
||||
return;
|
||||
if (App::is_already_running('cron', 'include/cron.php', 540))
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$last = get_config('system','last_cron');
|
||||
|
@ -66,23 +61,6 @@ function cron_run(&$argv, &$argc){
|
|||
}
|
||||
}
|
||||
|
||||
$lockpath = get_lockpath();
|
||||
if ($lockpath != '') {
|
||||
$pidfile = new pidfile($lockpath, 'cron');
|
||||
if($pidfile->is_already_running()) {
|
||||
logger("cron: Already running");
|
||||
if ($pidfile->running_time() > 9*60) {
|
||||
$pidfile->kill();
|
||||
logger("cron: killed stale process");
|
||||
// Calling a new instance
|
||||
proc_run('php','include/cron.php');
|
||||
}
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
$a->set_baseurl(get_config('system','url'));
|
||||
|
||||
load_hooks();
|
||||
|
|
|
@ -19,21 +19,16 @@ function cronhooks_run(&$argv, &$argc){
|
|||
|
||||
require_once('include/session.php');
|
||||
require_once('include/datetime.php');
|
||||
require_once('include/pidfile.php');
|
||||
|
||||
load_config('config');
|
||||
load_config('system');
|
||||
|
||||
$maxsysload = intval(get_config('system','maxloadavg'));
|
||||
if($maxsysload < 1)
|
||||
$maxsysload = 50;
|
||||
|
||||
$load = current_load();
|
||||
if($load) {
|
||||
if(intval($load) > $maxsysload) {
|
||||
logger('system: load ' . $load . ' too high. Cronhooks deferred to next scheduled run.');
|
||||
// Don't check this stuff if the function is called by the poller
|
||||
if (App::callstack() != "poller_run") {
|
||||
if (App::maxload_reached())
|
||||
return;
|
||||
if (App::is_already_running('cronhooks', 'include/cronhooks.php', 1140))
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$last = get_config('system','last_cronhook');
|
||||
|
@ -50,21 +45,6 @@ function cronhooks_run(&$argv, &$argc){
|
|||
}
|
||||
}
|
||||
|
||||
$lockpath = get_lockpath();
|
||||
if ($lockpath != '') {
|
||||
$pidfile = new pidfile($lockpath, 'cronhooks');
|
||||
if($pidfile->is_already_running()) {
|
||||
logger("cronhooks: Already running");
|
||||
if ($pidfile->running_time() > 19*60) {
|
||||
$pidfile->kill();
|
||||
logger("cronhooks: killed stale process");
|
||||
// Calling a new instance
|
||||
proc_run('php','include/cronhooks.php');
|
||||
}
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
$a->set_baseurl(get_config('system','url'));
|
||||
|
||||
load_hooks();
|
||||
|
|
|
@ -57,17 +57,8 @@ function delivery_run(&$argv, &$argc){
|
|||
continue;
|
||||
}
|
||||
|
||||
$maxsysload = intval(get_config('system','maxloadavg'));
|
||||
if($maxsysload < 1)
|
||||
$maxsysload = 50;
|
||||
|
||||
$load = current_load();
|
||||
if($load) {
|
||||
if(intval($load) > $maxsysload) {
|
||||
logger('system: load ' . $load . ' too high. Delivery deferred to next queue run.');
|
||||
if (App::maxload_reached())
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// It's ours to deliver. Remove it from the queue.
|
||||
|
||||
|
|
|
@ -20,22 +20,14 @@ function discover_poco_run(&$argv, &$argc){
|
|||
|
||||
require_once('include/session.php');
|
||||
require_once('include/datetime.php');
|
||||
require_once('include/pidfile.php');
|
||||
|
||||
load_config('config');
|
||||
load_config('system');
|
||||
|
||||
$maxsysload = intval(get_config('system','maxloadavg'));
|
||||
if($maxsysload < 1)
|
||||
$maxsysload = 50;
|
||||
|
||||
$load = current_load();
|
||||
if($load) {
|
||||
if(intval($load) > $maxsysload) {
|
||||
logger('system: load ' . $load . ' too high. discover_poco deferred to next scheduled run.');
|
||||
// Don't check this stuff if the function is called by the poller
|
||||
if (App::callstack() != "poller_run")
|
||||
if (App::maxload_reached())
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if(($argc > 2) && ($argv[1] == "dirsearch")) {
|
||||
$search = urldecode($argv[2]);
|
||||
|
@ -50,21 +42,10 @@ function discover_poco_run(&$argv, &$argc){
|
|||
} else
|
||||
die("Unknown or missing parameter ".$argv[1]."\n");
|
||||
|
||||
$lockpath = get_lockpath();
|
||||
if ($lockpath != '') {
|
||||
$pidfile = new pidfile($lockpath, 'discover_poco'.$mode.urlencode($search));
|
||||
if($pidfile->is_already_running()) {
|
||||
logger("discover_poco: Already running");
|
||||
if ($pidfile->running_time() > 19*60) {
|
||||
$pidfile->kill();
|
||||
logger("discover_poco: killed stale process");
|
||||
// Calling a new instance
|
||||
if ($mode == 0)
|
||||
proc_run('php','include/discover_poco.php');
|
||||
}
|
||||
exit;
|
||||
}
|
||||
}
|
||||
// Don't check this stuff if the function is called by the poller
|
||||
if (App::callstack() != "poller_run")
|
||||
if (App::is_already_running('discover_poco'.$mode.urlencode($search), 'include/discover_poco.php', 1140))
|
||||
return;
|
||||
|
||||
$a->set_baseurl(get_config('system','url'));
|
||||
|
||||
|
|
|
@ -31,7 +31,6 @@ function onepoll_run(&$argv, &$argc){
|
|||
require_once('include/Contact.php');
|
||||
require_once('include/email.php');
|
||||
require_once('include/socgraph.php');
|
||||
require_once('include/pidfile.php');
|
||||
require_once('include/queue_fn.php');
|
||||
|
||||
load_config('config');
|
||||
|
@ -60,18 +59,10 @@ function onepoll_run(&$argv, &$argc){
|
|||
return;
|
||||
}
|
||||
|
||||
$lockpath = get_lockpath();
|
||||
if ($lockpath != '') {
|
||||
$pidfile = new pidfile($lockpath, 'onepoll'.$contact_id);
|
||||
if ($pidfile->is_already_running()) {
|
||||
logger("onepoll: Already running for contact ".$contact_id);
|
||||
if ($pidfile->running_time() > 9*60) {
|
||||
$pidfile->kill();
|
||||
logger("killed stale process");
|
||||
}
|
||||
exit;
|
||||
}
|
||||
}
|
||||
// Don't check this stuff if the function is called by the poller
|
||||
if (App::callstack() != "poller_run")
|
||||
if (App::is_already_running('onepoll'.$contact_id, '', 540))
|
||||
return;
|
||||
|
||||
$d = datetime_convert();
|
||||
|
||||
|
|
|
@ -714,6 +714,49 @@ function ostatus_fetch_conversation($self, $conversation_id = "") {
|
|||
return $base_url."/conversation/".$conversation_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Fetches actor details of a given actor and user id
|
||||
*
|
||||
* @param string $actor The actor url
|
||||
* @param int $uid The user id
|
||||
*
|
||||
* @return array Array with actor details
|
||||
*/
|
||||
function ostatus_get_actor_details($actor, $uid) {
|
||||
|
||||
$details = array();
|
||||
|
||||
$contact = q("SELECT `id`, `rel`, `network` FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' AND `network` != '%s'",
|
||||
$uid, normalise_link($actor), NETWORK_STATUSNET);
|
||||
|
||||
if (!$contact)
|
||||
$contact = q("SELECT `id`, `rel`, `network` FROM `contact` WHERE `uid` = %d AND `alias` IN ('%s', '%s') AND `network` != '%s'",
|
||||
$uid, $actor, normalise_link($actor), NETWORK_STATUSNET);
|
||||
|
||||
if ($contact) {
|
||||
logger("Found contact for url ".$actor, LOGGER_DEBUG);
|
||||
$details["contact_id"] = $contact[0]["id"];
|
||||
$details["network"] = $contact[0]["network"];
|
||||
|
||||
$details["not_following"] = !in_array($contact[0]["rel"], array(CONTACT_IS_SHARING, CONTACT_IS_FRIEND));
|
||||
} else {
|
||||
logger("No contact found for user ".$uid." and url ".$actor, LOGGER_DEBUG);
|
||||
|
||||
// Adding a global contact
|
||||
/// @TODO Use this data for the post
|
||||
$details["global_contact_id"] = get_contact($actor, 0);
|
||||
|
||||
logger("Global contact ".$global_contact_id." found for url ".$actor, LOGGER_DEBUG);
|
||||
|
||||
$details["contact_id"] = $parent["contact-id"];
|
||||
$details["network"] = NETWORK_OSTATUS;
|
||||
|
||||
$details["not_following"] = true;
|
||||
}
|
||||
|
||||
return $details;
|
||||
}
|
||||
|
||||
function ostatus_completion($conversation_url, $uid, $item = array(), $self = "") {
|
||||
|
||||
$a = get_app();
|
||||
|
@ -954,40 +997,20 @@ function ostatus_completion($conversation_url, $uid, $item = array(), $self = ""
|
|||
if (isset($single_conv->actor->url))
|
||||
$actor = $single_conv->actor->url;
|
||||
|
||||
$contact = q("SELECT `id`, `rel` FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' AND `network` != '%s'",
|
||||
$uid, normalise_link($actor), NETWORK_STATUSNET);
|
||||
|
||||
if (count($contact)) {
|
||||
logger("Found contact for url ".$actor, LOGGER_DEBUG);
|
||||
$contact_id = $contact[0]["id"];
|
||||
|
||||
$not_following = !in_array($contact[0]["rel"], array(CONTACT_IS_SHARING, CONTACT_IS_FRIEND));
|
||||
} else {
|
||||
logger("No contact found for url ".$actor, LOGGER_DEBUG);
|
||||
|
||||
// Adding a global contact
|
||||
/// @TODO Use this data for the post
|
||||
$global_contact_id = get_contact($actor, 0);
|
||||
|
||||
logger("Global contact ".$global_contact_id." found for url ".$actor, LOGGER_DEBUG);
|
||||
|
||||
$contact_id = $parent["contact-id"];
|
||||
|
||||
$not_following = true;
|
||||
}
|
||||
$details = ostatus_get_actor_details($actor, $uid);
|
||||
|
||||
// Do we only want to import threads that were started by our contacts?
|
||||
if ($not_following AND $new_parent AND get_config('system','ostatus_full_threads')) {
|
||||
logger("Don't import uri ".$first_id." because we don't follow the person ".$actor, LOGGER_DEBUG);
|
||||
if ($details["not_following"] AND $new_parent AND get_config('system','ostatus_full_threads')) {
|
||||
logger("Don't import uri ".$first_id." because user ".$uid." doesn't follow the person ".$actor, LOGGER_DEBUG);
|
||||
continue;
|
||||
}
|
||||
|
||||
$arr = array();
|
||||
$arr["network"] = NETWORK_OSTATUS;
|
||||
$arr["network"] = $details["network"];
|
||||
$arr["uri"] = $single_conv->id;
|
||||
$arr["plink"] = $plink;
|
||||
$arr["uid"] = $uid;
|
||||
$arr["contact-id"] = $contact_id;
|
||||
$arr["contact-id"] = $details["contact_id"];
|
||||
$arr["parent-uri"] = $parent_uri;
|
||||
$arr["created"] = $single_conv->published;
|
||||
$arr["edited"] = $single_conv->published;
|
||||
|
@ -1113,6 +1136,15 @@ function ostatus_completion($conversation_url, $uid, $item = array(), $self = ""
|
|||
|
||||
if (($item_stored < 0) AND (count($item) > 0)) {
|
||||
//$arr["app"] .= " (OStatus-NoConvFound)";
|
||||
|
||||
if (get_config('system','ostatus_full_threads')) {
|
||||
$details = ostatus_get_actor_details($item["owner-link"], $uid);
|
||||
if ($details["not_following"]) {
|
||||
logger("Don't import uri ".$item["uri"]." because user ".$uid." doesn't follow the person ".$item["owner-link"], LOGGER_DEBUG);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$item_stored = item_store($item, true);
|
||||
if ($item_stored) {
|
||||
logger("Uri ".$item["uri"]." wasn't found in conversation ".$conversation_url, LOGGER_DEBUG);
|
||||
|
|
|
@ -29,17 +29,8 @@ function poller_run(&$argv, &$argc){
|
|||
if (poller_max_connections_reached())
|
||||
return;
|
||||
|
||||
$load = current_load();
|
||||
if($load) {
|
||||
$maxsysload = intval(get_config('system','maxloadavg'));
|
||||
if($maxsysload < 1)
|
||||
$maxsysload = 50;
|
||||
|
||||
if(intval($load) > $maxsysload) {
|
||||
logger('system: load ' . $load . ' too high. poller deferred to next scheduled run.');
|
||||
if (App::maxload_reached())
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Checking the number of workers
|
||||
if (poller_too_much_workers(1)) {
|
||||
|
|
|
@ -74,25 +74,14 @@ function pubsubpublish_run(&$argv, &$argc){
|
|||
};
|
||||
|
||||
require_once('include/items.php');
|
||||
require_once('include/pidfile.php');
|
||||
|
||||
load_config('config');
|
||||
load_config('system');
|
||||
|
||||
$lockpath = get_lockpath();
|
||||
if ($lockpath != '') {
|
||||
$pidfile = new pidfile($lockpath, 'pubsubpublish');
|
||||
if($pidfile->is_already_running()) {
|
||||
logger("Already running");
|
||||
if ($pidfile->running_time() > 9*60) {
|
||||
$pidfile->kill();
|
||||
logger("killed stale process");
|
||||
// Calling a new instance
|
||||
proc_run('php',"include/pubsubpublish.php");
|
||||
}
|
||||
// Don't check this stuff if the function is called by the poller
|
||||
if (App::callstack() != "poller_run")
|
||||
if (App::is_already_running("pubsubpublish", "include/pubsubpublish.php", 540))
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$a->set_baseurl(get_config('system','url'));
|
||||
|
||||
|
|
|
@ -22,26 +22,15 @@ function queue_run(&$argv, &$argc){
|
|||
require_once("include/datetime.php");
|
||||
require_once('include/items.php');
|
||||
require_once('include/bbcode.php');
|
||||
require_once('include/pidfile.php');
|
||||
require_once('include/socgraph.php');
|
||||
|
||||
load_config('config');
|
||||
load_config('system');
|
||||
|
||||
$lockpath = get_lockpath();
|
||||
if ($lockpath != '') {
|
||||
$pidfile = new pidfile($lockpath, 'queue');
|
||||
if($pidfile->is_already_running()) {
|
||||
logger("queue: Already running");
|
||||
if ($pidfile->running_time() > 9*60) {
|
||||
$pidfile->kill();
|
||||
logger("queue: killed stale process");
|
||||
// Calling a new instance
|
||||
proc_run('php',"include/queue.php");
|
||||
}
|
||||
// Don't check this stuff if the function is called by the poller
|
||||
if (App::callstack() != "poller_run")
|
||||
if (App::is_already_running('queue', 'include/queue.php', 540))
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$a->set_baseurl(get_config('system','url'));
|
||||
|
||||
|
|
|
@ -16,7 +16,6 @@ function update_gcontact_run(&$argv, &$argc){
|
|||
unset($db_host, $db_user, $db_pass, $db_data);
|
||||
};
|
||||
|
||||
require_once('include/pidfile.php');
|
||||
require_once('include/Scrape.php');
|
||||
require_once("include/socgraph.php");
|
||||
|
||||
|
@ -37,18 +36,10 @@ function update_gcontact_run(&$argv, &$argc){
|
|||
return;
|
||||
}
|
||||
|
||||
$lockpath = get_lockpath();
|
||||
if ($lockpath != '') {
|
||||
$pidfile = new pidfile($lockpath, 'update_gcontact'.$contact_id);
|
||||
if ($pidfile->is_already_running()) {
|
||||
logger("update_gcontact: Already running for contact ".$contact_id);
|
||||
if ($pidfile->running_time() > 9*60) {
|
||||
$pidfile->kill();
|
||||
logger("killed stale process");
|
||||
}
|
||||
exit;
|
||||
}
|
||||
}
|
||||
// Don't check this stuff if the function is called by the poller
|
||||
if (App::callstack() != "poller_run")
|
||||
if (App::is_already_running('update_gcontact'.$contact_id, '', 540))
|
||||
return;
|
||||
|
||||
$r = q("SELECT * FROM `gcontact` WHERE `id` = %d", intval($contact_id));
|
||||
|
||||
|
|
Loading…
Reference in a new issue