aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriendika <info@friendika.com>2011-08-28 21:41:42 -0700
committerFriendika <info@friendika.com>2011-08-28 21:41:42 -0700
commit846c4cea7c0e3868a63a187ee9a504a031b2a7e4 (patch)
tree034407e183dfb95ce9ef77cbe6a5af73377e2090
parentf29f228463d35f574d6d285be0cf337b7d39c541 (diff)
downloadvolse-hubzilla-846c4cea7c0e3868a63a187ee9a504a031b2a7e4.tar.gz
volse-hubzilla-846c4cea7c0e3868a63a187ee9a504a031b2a7e4.tar.bz2
volse-hubzilla-846c4cea7c0e3868a63a187ee9a504a031b2a7e4.zip
implement delivery queue in case notifier gets killed
-rw-r--r--boot.php2
-rw-r--r--database.sql6
-rw-r--r--include/delivery.php6
-rw-r--r--include/diaspora.php5
-rw-r--r--include/items.php4
-rw-r--r--include/notifier.php45
-rw-r--r--include/queue.php14
-rw-r--r--update.php12
8 files changed, 74 insertions, 20 deletions
diff --git a/boot.php b/boot.php
index 060bd7117..595dc1fef 100644
--- a/boot.php
+++ b/boot.php
@@ -9,7 +9,7 @@ require_once("include/pgettext.php");
define ( 'FRIENDIKA_VERSION', '2.2.1086' );
define ( 'DFRN_PROTOCOL_VERSION', '2.21' );
-define ( 'DB_UPDATE_VERSION', 1083 );
+define ( 'DB_UPDATE_VERSION', 1084 );
define ( 'EOL', "<br />\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
diff --git a/database.sql b/database.sql
index f6ae4c7c6..9819914f7 100644
--- a/database.sql
+++ b/database.sql
@@ -606,3 +606,9 @@ INDEX ( `iid` )
) ENGINE = MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE IF NOT EXISTS `deliverq` (
+`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
+`cmd` CHAR( 32 ) NOT NULL ,
+`item` INT NOT NULL ,
+`contact` INT NOT NULL
+) ENGINE = MyISAM DEFAULT CHARSET=utf8;
diff --git a/include/delivery.php b/include/delivery.php
index 0df8ea7e4..1f5883c26 100644
--- a/include/delivery.php
+++ b/include/delivery.php
@@ -37,6 +37,12 @@ function delivery_run($argv, $argc){
$item_id = intval($argv[2]);
$contact_id = intval($argv[3]);
+ q("delete from deliverq where cmd = '%s' and item = %d and contact = %d limit 1",
+ dbesc($cmd),
+ dbesc($item_id),
+ dbesc($contact_id)
+ );
+
if((! $item_id) || (! $contact_id))
return;
diff --git a/include/diaspora.php b/include/diaspora.php
index 6cba0ecec..99bc21c0b 100644
--- a/include/diaspora.php
+++ b/include/diaspora.php
@@ -140,10 +140,9 @@ EOT;
$encrypted_outer_key_bundle = '';
openssl_public_encrypt($outer_json,$encrypted_outer_key_bundle,$pubkey);
- logger('outer_bundle_encrypt: ' . openssl_error_string());
$b64_encrypted_outer_key_bundle = base64_encode($encrypted_outer_key_bundle);
- logger('outer_bundle: ' . $b64_encrypted_outer_key_bundle . ' key: ' . $pubkey);
+ logger('outer_bundle: ' . $b64_encrypted_outer_key_bundle . ' key: ' . $pubkey, LOGGER_DATA);
$encrypted_header_json_object = json_encode(array('aes_key' => base64_encode($encrypted_outer_key_bundle),
'ciphertext' => base64_encode($ciphertext)));
@@ -223,7 +222,7 @@ function diaspora_decode($importer,$xml) {
* </decrypted_header>
*/
- logger('decrypted: ' . $decrypted);
+ logger('decrypted: ' . $decrypted, LOGGER_DEBUG);
$idom = parse_xml_string($decrypted,false);
$inner_iv = base64_decode($idom->iv);
diff --git a/include/items.php b/include/items.php
index e9594cff2..1603dec60 100644
--- a/include/items.php
+++ b/include/items.php
@@ -927,7 +927,7 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
if(! $curl_stat)
return(-1); // timed out
- logger('dfrn_deliver: ' . $xml);
+ logger('dfrn_deliver: ' . $xml, LOGGER_DATA);
if(! $xml)
return 3;
@@ -991,7 +991,7 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
$key = substr(random_string(),0,16);
$data = bin2hex(aes_encrypt($postvars['data'],$key));
$postvars['data'] = $data;
- logger('rino: sent key = ' . $key);
+ logger('rino: sent key = ' . $key, LOGGER_DEBUG);
if($dfrn_version >= 2.1) {
diff --git a/include/notifier.php b/include/notifier.php
index b87aa95b1..cde156cbd 100644
--- a/include/notifier.php
+++ b/include/notifier.php
@@ -379,11 +379,27 @@ function notifier_run($argv, $argc){
dbesc($recip_str)
);
- // delivery loop
require_once('include/salmon.php');
+ $interval = intval(get_config('system','delivery_interval'));
+ if(! $interval)
+ $interval = 2;
+
+ // delivery loop
+
if(count($r)) {
+
+ foreach($r as $contact) {
+ if((! $mail) && (! $fsuggest) && (! $followup) && (! $contact['self'])) {
+ q("insert into deliverq ( `cmd`,`item`,`contact` ) values ('%s', %d, %d )",
+ dbesc($cmd),
+ intval($item_id),
+ intval($contact['id'])
+ );
+ }
+ }
+
foreach($r as $contact) {
if($contact['self'])
continue;
@@ -392,13 +408,8 @@ function notifier_run($argv, $argc){
// we will deliver single recipient types of message and email receipients here.
if((! $mail) && (! $fsuggest) && (! $followup)) {
- $interval = intval(get_config('system','delivery_interval'));
- if(! $interval)
- $interval = 2;
-
proc_run('php','include/delivery.php',$cmd,$item_id,$contact['id']);
- sleep($interval);
- continue;
+ @time_sleep_until(microtime(true) + (float) $interval);
}
$deliver_status = 0;
@@ -624,6 +635,18 @@ function notifier_run($argv, $argc){
if(count($r)) {
logger('pubdeliver: ' . print_r($r,true));
+ // throw everything into the queue in case we get killed
+
+ foreach($r as $rr) {
+ if((! $mail) && (! $fsuggest) && (! $followup)) {
+ q("insert into deliverq ( `cmd`,`item`,`contact` ) values ('%s', %d, %d )",
+ dbesc($cmd),
+ intval($item_id),
+ intval($rr['id'])
+ );
+ }
+ }
+
foreach($r as $rr) {
/* Don't deliver to folks who have already been delivered to */
@@ -634,13 +657,9 @@ function notifier_run($argv, $argc){
}
if((! $mail) && (! $fsuggest) && (! $followup)) {
- $interval = intval(get_config('system','delivery_interval'));
- if(! $interval)
- $interval = 2;
-
+ logger('notifier: delivery agent: ' . $rr['name'] . ' ' . $rr['id']);
proc_run('php','include/delivery.php',$cmd,$item_id,$rr['id']);
- sleep($interval);
- continue;
+ @time_sleep_until(microtime(true) + (float) $interval);
}
}
}
diff --git a/include/queue.php b/include/queue.php
index f1bcf2e9f..0cb6fcec2 100644
--- a/include/queue.php
+++ b/include/queue.php
@@ -38,6 +38,20 @@ function queue_run($argv, $argc){
logger('queue: start');
+ $interval = intval(get_config('system','delivery_interval'));
+ if(! $interval)
+ $interval = 2;
+
+
+ $r = q("select * from deliverq where 1");
+ if(count($r)) {
+ foreach($r as $rr) {
+ logger('queue: deliverq');
+ proc_run('php','include/delivery.php',$rr['cmd'],$rr['item'],$rr['contact']);
+ @time_sleep_until(microtime(true) + (float) $interval);
+ }
+ }
+
$r = q("SELECT `queue`.*, `contact`.`name`, `contact`.`uid` FROM `queue`
LEFT JOIN `contact` ON `queue`.`cid` = `contact`.`id`
WHERE `queue`.`created` < UTC_TIMESTAMP() - INTERVAL 3 DAY");
diff --git a/update.php b/update.php
index c23ce95c6..14bc48ab7 100644
--- a/update.php
+++ b/update.php
@@ -1,6 +1,6 @@
<?php
-define( 'UPDATE_VERSION' , 1083 );
+define( 'UPDATE_VERSION' , 1084 );
/**
*
@@ -697,3 +697,13 @@ function update_1082() {
}
}
}
+
+function update_1083() {
+ q("CREATE TABLE IF NOT EXISTS `deliverq` (
+ `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
+ `cmd` CHAR( 32 ) NOT NULL ,
+ `item` INT NOT NULL ,
+ `contact` INT NOT NULL
+ ) ENGINE = MYISAM ;");
+
+} \ No newline at end of file