diff --git a/doc/htconfig.md b/doc/htconfig.md index b2f7cf66e..2c8b44439 100644 --- a/doc/htconfig.md +++ b/doc/htconfig.md @@ -54,6 +54,7 @@ Example: To set the directory value please add this line to your .htconfig.php: * **max_batch_queue** - Default value is 1000. * **max_processes_backend** - Maximum number of concurrent database processes for background tasks. Default value is 5. * **max_processes_frontend** - Maximum number of concurrent database processes for foreground tasks. Default value is 20. +* **min_poll_interval** - minimal distance in minutes between two polls for a contact. Default is 1. Reasonable values are between 1 and 59. * **memcache** (Boolean) - Use memcache. To use memcache the PECL extension "memcache" has to be installed and activated. * **memcache_host** - Hostname of the memcache daemon. Default is '127.0.0.1'. * **memcache_port** - Portnumber of the memcache daemon. Default is 11211. diff --git a/include/cron.php b/include/cron.php index bac9c8a3d..3702bf8b3 100644 --- a/include/cron.php +++ b/include/cron.php @@ -122,6 +122,8 @@ function cron_poll_contacts($argc, $argv) { $force = true; } + $min_poll_interval = Config::get('system', 'min_poll_interval', 1); + $sql_extra = (($manual_id) ? " AND `id` = $manual_id " : ""); reload_plugins(); @@ -195,7 +197,7 @@ function cron_poll_contacts($argc, $argv) { $contact['priority'] = (($poll_interval !== false) ? intval($poll_interval) : 3); } - if ($contact['priority'] AND !$force) { + if (($contact['priority'] >= 0) AND !$force) { $update = false; $t = $contact['last-update']; @@ -225,11 +227,16 @@ function cron_poll_contacts($argc, $argv) { } break; case 1: - default: if (datetime_convert('UTC', 'UTC', 'now') > datetime_convert('UTC', 'UTC', $t . " + 1 hour")) { $update = true; } break; + case 0: + default: + if (datetime_convert('UTC', 'UTC', 'now') > datetime_convert('UTC', 'UTC', $t . " + ".$min_poll_interval." minute")) { + $update = true; + } + break; } if (!$update) { continue; diff --git a/include/items.php b/include/items.php index c36b842b4..4a68bd286 100644 --- a/include/items.php +++ b/include/items.php @@ -2076,7 +2076,7 @@ function item_expire($uid, $days, $network = "", $force = false) { drop_item($item['id'], false); } - proc_run(PRIORITY_HIGH, "include/notifier.php", "expire", $uid); + proc_run(PRIORITY_LOW, "include/notifier.php", "expire", $uid); } @@ -2099,7 +2099,7 @@ function drop_items($items) { // multiple threads may have been deleted, send an expire notification if ($uid) { - proc_run(PRIORITY_HIGH, "include/notifier.php", "expire", $uid); + proc_run(PRIORITY_LOW, "include/notifier.php", "expire", $uid); } } @@ -2290,11 +2290,12 @@ function drop_item($id, $interactive = true) { } } + // send the notification upstream/downstream + // The priority depends on how the deletion is done. $drop_id = intval($item['id']); + $priority = ($interactive ? PRIORITY_HIGH : PRIORITY_LOW); - // send the notification upstream/downstream as the case may be - - proc_run(PRIORITY_HIGH, "include/notifier.php", "drop", $drop_id); + proc_run($priority, "include/notifier.php", "drop", $drop_id); if (! $interactive) { return $owner; diff --git a/include/notifier.php b/include/notifier.php index 4f9b34d01..f0396798f 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -55,6 +55,17 @@ function notifier_run(&$argv, &$argc){ return; } + // Inherit the priority + $queue = dba::select('workerqueue', array('priority'), array('pid' => getmypid()), array('limit' => 1)); + if (dbm::is_result($queue)) { + $priority = (int)$queue['priority']; + logger('inherited priority: '.$priority); + } else { + // Normally this shouldn't happen. + $priority = PRIORITY_HIGH; + logger('no inherited priority! Something is wrong.'); + } + logger('notifier: invoked: ' . print_r($argv,true), LOGGER_DEBUG); $cmd = $argv[1]; @@ -348,7 +359,7 @@ function notifier_run(&$argv, &$argc){ // a delivery fork. private groups (forum_mode == 2) do not uplink if ((intval($parent['forum_mode']) == 1) && (! $top_level) && ($cmd !== 'uplink')) { - proc_run(PRIORITY_HIGH,'include/notifier.php','uplink',$item_id); + proc_run($priority, 'include/notifier.php', 'uplink', $item_id); } $conversants = array(); @@ -487,7 +498,7 @@ function notifier_run(&$argv, &$argc){ } logger("Deliver ".$target_item["guid"]." to ".$contact['url']." via network ".$contact['network'], LOGGER_DEBUG); - proc_run(PRIORITY_HIGH,'include/delivery.php', $cmd, $item_id, $contact['id']); + proc_run($priority, 'include/delivery.php', $cmd, $item_id, $contact['id']); } } @@ -552,7 +563,7 @@ function notifier_run(&$argv, &$argc){ if ((! $mail) && (! $fsuggest) && (! $followup)) { logger('notifier: delivery agent: '.$rr['name'].' '.$rr['id'].' '.$rr['network'].' '.$target_item["guid"]); - proc_run(PRIORITY_HIGH,'include/delivery.php',$cmd,$item_id,$rr['id']); + proc_run($priority, 'include/delivery.php', $cmd, $item_id, $rr['id']); } } } @@ -592,7 +603,7 @@ function notifier_run(&$argv, &$argc){ } // Handling the pubsubhubbub requests - proc_run(PRIORITY_HIGH,'include/pubsubpublish.php'); + proc_run($priority, 'include/pubsubpublish.php'); } logger('notifier: calling hooks', LOGGER_DEBUG);