]> cat aescling's git repositories - mastodon.git/commitdiff
Retry thread resolving (#5599)
authorThibG <thib@sitedethib.com>
Sat, 11 Nov 2017 15:49:04 +0000 (16:49 +0100)
committerEugen Rochko <eugen@zeonfederated.com>
Sat, 11 Nov 2017 15:49:04 +0000 (16:49 +0100)
Thread resolving is one of the few tasks that isn't retried on failure.
One common cause for failure of this task is a well-connected user replying to
a toot from a little-connected user on a small instance: the small instance
will get many requests at once, and will often fail to answer requests within
the 10 seconds timeout used by Mastodon.

This changes makes the ThreadResolveWorker retry a few times, with a
rapidly-increasing time before retries and large random contribution in order
to spread the load over time.

app/workers/thread_resolve_worker.rb

index 38287e8e64b683ae1dfa1538ffe165accd7d1aa8..c18a778d555e472ccb8009907202db66e6f17431 100644 (file)
@@ -3,7 +3,11 @@
 class ThreadResolveWorker
   include Sidekiq::Worker
 
-  sidekiq_options queue: 'pull', retry: false
+  sidekiq_options queue: 'pull', retry: 3
+
+  sidekiq_retry_in do |count|
+    15 + 10 * (count**4) + rand(10 * (count**4))
+  end
 
   def perform(child_status_id, parent_url)
     child_status  = Status.find(child_status_id)