]> cat aescling's git repositories - mastodon.git/commitdiff
Attempt fixing deadlocks by moving account stats update outside transaction (#9437)
authorThibG <thib@sitedethib.com>
Wed, 5 Dec 2018 21:51:12 +0000 (22:51 +0100)
committerEugen Rochko <eugen@zeonfederated.com>
Wed, 5 Dec 2018 21:51:12 +0000 (22:51 +0100)
* 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

app/models/status.rb

index 2e894a6f10ad2dd550906df1517bb03e1da9fed1..0705ba4c168c4f05efc184b5e5e7c9b08f6c452b 100644 (file)
@@ -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