From d994b4583a57afa9e0be4facb06e58166641cdf1 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Thu, 24 Mar 2011 18:41:25 -0700 Subject: [PATCH] TwitterBridge: discard outgoing queue items instead of retrying when Twitter API returns HTTP 400 or 404 error codes We get HTTP 400 for various cases of invalid data, where retrying doesn't help at all -- previously those would loop forever, or until something died at least. :) 400 is also used for rate limiting, but retrying *immediately* will just hit the rate limit again, so better to discard if we're going over for now. --- plugins/TwitterBridge/twitter.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/plugins/TwitterBridge/twitter.php b/plugins/TwitterBridge/twitter.php index f5a0b62588..2c68f89f16 100644 --- a/plugins/TwitterBridge/twitter.php +++ b/plugins/TwitterBridge/twitter.php @@ -320,7 +320,20 @@ function process_error($e, $flink, $notice) common_log(LOG_WARNING, $logmsg); + // http://dev.twitter.com/pages/responses_errors switch($code) { + case 400: + // Probably invalid data (bad Unicode chars or coords) that + // cannot be resolved by just sending again. + // + // It could also be rate limiting, but retrying immediately + // won't help much with that, so we'll discard for now. + // If a facility for retrying things later comes up in future, + // we can detect the rate-limiting headers and use that. + // + // Discard the message permanently. + return true; + break; case 401: // Probably a revoked or otherwise bad access token - nuke! remove_twitter_link($flink); @@ -330,6 +343,13 @@ function process_error($e, $flink, $notice) // User has exceeder her rate limit -- toss the notice return true; break; + case 404: + // Resource not found. Shouldn't happen much on posting, + // but just in case! + // + // Consider it a matter for tossing the notice. + return true; + break; default: // For every other case, it's probably some flakiness so try