summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/jabber.php10
-rw-r--r--lib/util.php18
-rwxr-xr-xqueuedaemon.php12
3 files changed, 29 insertions, 11 deletions
diff --git a/lib/jabber.php b/lib/jabber.php
index 9bccc6fe4..8f8d6a4d8 100644
--- a/lib/jabber.php
+++ b/lib/jabber.php
@@ -132,10 +132,18 @@ function jabber_broadcast_notice($notice) {
while ($sub->fetch()) {
$user = User::staticGet($sub->subscriber);
if ($user && $user->jabber && $user->jabbernotify) {
- jabber_send_message($user->jabber, $msg);
+ common_log(LOG_INFO,
+ 'Sending notice ' . $notice->id . ' to ' . $user->jabber,
+ __FILE__);
+ $success = jabber_send_message($user->jabber, $msg);
+ if (!$success) {
+ # XXX: Not sure, but I think that's the right thing to do
+ return false;
+ }
}
}
}
+ return true;
}
function jabber_format_notice(&$profile, &$notice) {
diff --git a/lib/util.php b/lib/util.php
index 8beaa77d3..6aff62786 100644
--- a/lib/util.php
+++ b/lib/util.php
@@ -810,9 +810,9 @@ function common_redirect($url, $code=307) {
function common_broadcast_notice($notice, $remote=false) {
if (common_config('queue', 'enabled')) {
# Do it later!
- common_enqueue_notice($notice);
+ return common_enqueue_notice($notice);
} else {
- common_real_broadcast($notice, $remote);
+ return common_real_broadcast($notice, $remote);
}
}
@@ -827,24 +827,26 @@ function common_enqueue_notice($notice) {
if ($result === FALSE) {
$last_error = &PEAR::getStaticProperty('DB_DataObject','lastError');
common_log(LOG_ERROR, 'DB error inserting queue item: ' . $last_error->message);
- return;
+ return false;
}
common_log(LOG_INFO, 'complete queueing notice ID = ' . $notice->id);
return $result;
}
function common_real_broadcast($notice, $remote=false) {
- // XXX: optionally use a queue system like http://code.google.com/p/microapps/wiki/NQDQ
+ $success = true;
if (!$remote) {
# Make sure we have the OMB stuff
require_once(INSTALLDIR.'/lib/omb.php');
- omb_broadcast_remote_subscribers($notice);
+ $success = omb_broadcast_remote_subscribers($notice);
+ }
+ if ($success) {
+ require_once(INSTALLDIR.'/lib/jabber.php');
+ $success = jabber_broadcast_notice($notice);
}
- require_once(INSTALLDIR.'/lib/jabber.php');
- jabber_broadcast_notice($notice);
// XXX: broadcast notices to SMS
// XXX: broadcast notices to other IM
- return true;
+ return $success;
}
function common_broadcast_profile($profile) {
diff --git a/queuedaemon.php b/queuedaemon.php
index 91cfff0bf..8da69b9da 100755
--- a/queuedaemon.php
+++ b/queuedaemon.php
@@ -96,7 +96,15 @@ do {
if ($notice) {
qd_log(LOG_INFO, 'broadcasting notice ID = ' . $notice->id);
# XXX: what to do if broadcast fails?
- common_real_broadcast($notice, qd_is_remote($notice));
+ $result = common_real_broadcast($notice, qd_is_remote($notice));
+ if (!$result) {
+ qd_log(LOG_WARNING, 'Failed broadcast for notice ID = ' . $notice->id);
+ $orig = $qi;
+ $qi->claimed = NULL;
+ $qi->update($orig);
+ qd_log(LOG_WARNING, 'Abandoned claim for notice ID = ' . $notice->id);
+ continue;
+ }
qd_log(LOG_INFO, 'finished broadcasting notice ID = ' . $notice->id);
$notice = NULL;
} else {
@@ -105,7 +113,7 @@ do {
$qi->delete();
$qi = NULL;
} else {
- # qd_clear_old_claims();
+ qd_clear_old_claims();
# In busy times, sleep less
$sleeptime = 30000000/($in_a_row+1);
qd_log(LOG_INFO, 'sleeping ' . $sleeptime . ' microseconds');