FEATURE: allow post process mutex to be held longer

FEATURE: allow post process mutex to be held longer

Previously we would only hold the post process mutex for 1 minute, that is not enough when processing a post with lots of images. This raises the bar to 10 minutes.

It also cleans up error reporting around distributed mutexes expiring. We used to double report.

diff --git a/lib/cooked_post_processor.rb b/lib/cooked_post_processor.rb
index a0c2efd..ac16eb8 100644
--- a/lib/cooked_post_processor.rb
+++ b/lib/cooked_post_processor.rb
@@ -35,7 +35,7 @@ class CookedPostProcessor
   end
 
   def post_process(bypass_bump: false, new_post: false)
-    DistributedMutex.synchronize("post_process_#{@post.id}") do
+    DistributedMutex.synchronize("post_process_#{@post.id}", validity: 10.minutes) do
       DiscourseEvent.trigger(:before_post_process_cooked, @doc, @post)
       remove_full_quote_on_direct_reply if new_post
       post_process_oneboxes
diff --git a/lib/distributed_mutex.rb b/lib/distributed_mutex.rb
index 420c5bc..19f8b5d 100644
--- a/lib/distributed_mutex.rb
+++ b/lib/distributed_mutex.rb
@@ -31,11 +31,11 @@ class DistributedMutex
         yield
       ensure
         current_time = redis.time[0]
-        unless current_time < expire_time
-          warn("held for too long")
+        if current_time > expire_time
+          warn("held for too long, expected max: #{@validity} secs, took an extra #{current_time - expire_time} secs")
         end
 
-        unless unlock(expire_time)
+        if !unlock(expire_time) && current_time <= expire_time
           warn("didn't unlock cleanly")
         end
       end

GitHub sha: 67f5ad5a

2 Likes

This commit has been mentioned on Discourse Meta. There might be relevant details there: