From a253c31dee621d859575fed67a402edf75ce25ca Mon Sep 17 00:00:00 2001 From: Jeremy Daer Date: Mon, 16 Feb 2026 15:31:10 -0800 Subject: [PATCH] Batch webhook delivery cleanup to prevent DB lock contention (#2555) Follow-up to #2550 which added a created_at index and increased cleanup frequency. The delete itself was still unbatched and vulnerable whenever a backlog accumulates (first run after deploy, clock skew, etc). Delete in small batches with a pause between each to let other transactions through, following the SolidQueue pattern. --- app/models/webhook/delivery.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/webhook/delivery.rb b/app/models/webhook/delivery.rb index 50a0cd560..40dab42f0 100644 --- a/app/models/webhook/delivery.rb +++ b/app/models/webhook/delivery.rb @@ -22,8 +22,8 @@ class Webhook::Delivery < ApplicationRecord after_create_commit :deliver_later - def self.cleanup - stale.delete_all + def self.cleanup(batch_size: 500, pause: 0.1) + sleep pause until stale.limit(batch_size).delete_all.zero? end def deliver_later