From: ThibG Date: Wed, 5 Dec 2018 21:51:12 +0000 (+0100) Subject: Attempt fixing deadlocks by moving account stats update outside transaction (#9437) X-Git-Url: https://git.xn--scling-oua.cat.family/?a=commitdiff_plain;h=1a22eff1e00194e50751f2ea91ec7326ef15b4fc;p=mastodon.git Attempt fixing deadlocks by moving account stats update outside transaction (#9437) * Use `update_column` instead of `update_attribute` in callback `update_attribute` would normally cause callbacks to be called. Called from a callback, it seems to stop further callbacks from executing. `update_column` does the same work, but without calling callbacks or preventing other callbacks from executing. * Fix deadlocks by moving account stats update outside transaction --- diff --git a/app/models/status.rb b/app/models/status.rb index 2e894a6f1..0705ba4c1 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -236,8 +236,8 @@ class Status < ApplicationRecord update_status_stat!(key => [public_send(key) - 1, 0].max) end - after_create :increment_counter_caches - after_destroy :decrement_counter_caches + after_create_commit :increment_counter_caches + after_destroy_commit :decrement_counter_caches after_create_commit :store_uri, if: :local? after_create_commit :update_statistics, if: :local? @@ -426,7 +426,7 @@ class Status < ApplicationRecord end def store_uri - update_attribute(:uri, ActivityPub::TagManager.instance.uri_for(self)) if uri.nil? + update_column(:uri, ActivityPub::TagManager.instance.uri_for(self)) if uri.nil? end def prepare_contents