From dc22ed84807555f6a16c041c16b3bc607c6587d8 Mon Sep 17 00:00:00 2001
From: Brion Vibber <brion@pobox.com>
Date: Sat, 22 May 2010 17:43:56 -0700
Subject: [PATCH] Hotpatch for Facebook mirror problems: drop messages when
 hitting rate limit (err 341) instead of retrying forever. On unknown errors,
 now throwing an exception so it'll hit the message retry limits.

---
 plugins/Facebook/facebookutil.php | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/plugins/Facebook/facebookutil.php b/plugins/Facebook/facebookutil.php
index ab2d427264..045891649c 100644
--- a/plugins/Facebook/facebookutil.php
+++ b/plugins/Facebook/facebookutil.php
@@ -158,9 +158,22 @@ function facebookBroadcastNotice($notice)
 
                 remove_facebook_app($flink);
 
-        } else {
+            } else if ($code == 341) {
+                // 341 Feed action request limit reached - Unable to update Facebook status
+                // Reposting immediately probably won't work, so drop the message for now. :(
+
+                common_log(LOG_ERR, "Facebook rate limit hit: dropping notice $notice->id");
+                return true;
+            } else {
 
                 // Try sending again later.
+                //
+                // @fixme at the moment, returning false here could lead to an infinite loop
+                // if the error condition isn't actually transitory.
+                //
+                // Temporarily throwing an exception to kill the process so it'll hit our
+                // retry limits.
+                throw new Exception("Facebook error $code on notice $notice->id");
 
                 return false;
             }
-- 
2.39.5