diff --git a/boot.php b/boot.php index 15341c0fed..2ad057d4ca 100644 --- a/boot.php +++ b/boot.php @@ -1069,6 +1069,7 @@ function proc_run($cmd) { $priority = PRIORITY_MEDIUM; $dont_fork = get_config("system", "worker_dont_fork"); + $created = datetime_convert(); if (is_int($run_parameter)) { $priority = $run_parameter; @@ -1076,6 +1077,9 @@ function proc_run($cmd) { if (isset($run_parameter['priority'])) { $priority = $run_parameter['priority']; } + if (isset($run_parameter['created'])) { + $created = $run_parameter['created']; + } if (isset($run_parameter['dont_fork'])) { $dont_fork = $run_parameter['dont_fork']; } @@ -1088,7 +1092,7 @@ function proc_run($cmd) { $found = dba::select('workerqueue', array('id'), array('parameter' => $parameters), array('limit' => 1)); if (!dbm::is_result($found)) { - dba::insert('workerqueue', array('parameter' => $parameters, 'created' => datetime_convert(), 'priority' => $priority)); + dba::insert('workerqueue', array('parameter' => $parameters, 'created' => $created, 'priority' => $priority)); } // Should we quit and wait for the poller to be called as a cronjob? diff --git a/include/notifier.php b/include/notifier.php index a08057f677..a5f378a55c 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -56,13 +56,15 @@ function notifier_run(&$argv, &$argc){ } // Inherit the priority - $queue = dba::select('workerqueue', array('priority'), array('pid' => getmypid()), array('limit' => 1)); + $queue = dba::select('workerqueue', array('priority', 'created'), array('pid' => getmypid()), array('limit' => 1)); if (dbm::is_result($queue)) { $priority = (int)$queue['priority']; + $process_created = $queue['created']; logger('inherited priority: '.$priority); } else { // Normally this shouldn't happen. $priority = PRIORITY_HIGH; + $process_created = datetime_convert(); logger('no inherited priority! Something is wrong.'); } @@ -498,7 +500,8 @@ function notifier_run(&$argv, &$argc){ } logger("Deliver ".$target_item["guid"]." to ".$contact['url']." via network ".$contact['network'], LOGGER_DEBUG); - proc_run(array('priority' => $priority, 'dont_fork' => true), 'include/delivery.php', $cmd, $item_id, $contact['id']); + proc_run(array('priority' => $priority, 'created' => $process_created, 'dont_fork' => true), + 'include/delivery.php', $cmd, $item_id, $contact['id']); } } @@ -563,7 +566,8 @@ function notifier_run(&$argv, &$argc){ if ((! $mail) && (! $fsuggest) && (! $followup)) { logger('notifier: delivery agent: '.$rr['name'].' '.$rr['id'].' '.$rr['network'].' '.$target_item["guid"]); - proc_run(array('priority' => $priority, 'dont_fork' => true), 'include/delivery.php', $cmd, $item_id, $rr['id']); + proc_run(array('priority' => $priority, 'created' => $process_created, 'dont_fork' => true), + 'include/delivery.php', $cmd, $item_id, $rr['id']); } } } @@ -603,7 +607,8 @@ function notifier_run(&$argv, &$argc){ } // Handling the pubsubhubbub requests - proc_run(array('priority' => PRIORITY_HIGH, 'dont_fork' => true), 'include/pubsubpublish.php'); + proc_run(array('priority' => PRIORITY_HIGH, 'created' => $process_created, 'dont_fork' => true), + 'include/pubsubpublish.php'); } logger('notifier: calling hooks', LOGGER_DEBUG); diff --git a/include/pubsubpublish.php b/include/pubsubpublish.php index 1112969f27..7c70059f90 100644 --- a/include/pubsubpublish.php +++ b/include/pubsubpublish.php @@ -11,13 +11,24 @@ function pubsubpublish_run(&$argv, &$argc){ if ($argc > 1) { $pubsubpublish_id = intval($argv[1]); } else { + // Inherit the creation time + $queue = dba::select('workerqueue', array('created'), array('pid' => getmypid()), array('limit' => 1)); + if (dbm::is_result($queue)) { + $process_created = $queue['created']; + } else { + // Normally this shouldn't happen. + $process_created = datetime_convert(); + logger('no inherited priority! Something is wrong.'); + } + // We'll push to each subscriber that has push > 0, // i.e. there has been an update (set in notifier.php). $r = q("SELECT `id`, `callback_url` FROM `push_subscriber` WHERE `push` > 0"); foreach ($r as $rr) { logger("Publish feed to ".$rr["callback_url"], LOGGER_DEBUG); - proc_run(array('priority' => PRIORITY_HIGH, 'dont_fork' => true), 'include/pubsubpublish.php', $rr["id"]); + proc_run(array('priority' => PRIORITY_HIGH, 'created' => $process_created, 'dont_fork' => true), + 'include/pubsubpublish.php', $rr["id"]); } }