Reset status cache when status_stat or media_attachment updates (#9119)
* Reset status cache when status_stat or media_attachment updates Fix #8711 Media attachments are generally immutable, but admins can update the sensitive flag, and this would ensure the change is visible instantly. Same for updates to status stats. That is a regression from #8185, because even the correct updated_at fetched from a join doesn't seem to invalidate the cache. * Remove join from Status#cache_ids since it has no effect
This commit is contained in:
parent
93a1ab9030
commit
11b3ee4f4c
3 changed files with 14 additions and 4 deletions
|
@ -130,6 +130,7 @@ class MediaAttachment < ApplicationRecord
|
||||||
"#{x},#{y}"
|
"#{x},#{y}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
after_commit :reset_parent_cache, on: :update
|
||||||
before_create :prepare_description, unless: :local?
|
before_create :prepare_description, unless: :local?
|
||||||
before_create :set_shortcode
|
before_create :set_shortcode
|
||||||
before_post_process :set_type_and_extension
|
before_post_process :set_type_and_extension
|
||||||
|
@ -230,4 +231,9 @@ class MediaAttachment < ApplicationRecord
|
||||||
bitrate: movie.bitrate,
|
bitrate: movie.bitrate,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def reset_parent_cache
|
||||||
|
return if status_id.nil?
|
||||||
|
Rails.cache.delete("statuses/#{status_id}")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -240,10 +240,6 @@ class Status < ApplicationRecord
|
||||||
before_validation :set_local
|
before_validation :set_local
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
def cache_ids
|
|
||||||
left_outer_joins(:status_stat).select('statuses.id, greatest(statuses.updated_at, status_stats.updated_at) AS updated_at')
|
|
||||||
end
|
|
||||||
|
|
||||||
def selectable_visibilities
|
def selectable_visibilities
|
||||||
visibilities.keys - %w(direct limited)
|
visibilities.keys - %w(direct limited)
|
||||||
end
|
end
|
||||||
|
|
|
@ -14,4 +14,12 @@
|
||||||
|
|
||||||
class StatusStat < ApplicationRecord
|
class StatusStat < ApplicationRecord
|
||||||
belongs_to :status, inverse_of: :status_stat
|
belongs_to :status, inverse_of: :status_stat
|
||||||
|
|
||||||
|
after_commit :reset_parent_cache
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def reset_parent_cache
|
||||||
|
Rails.cache.delete("statuses/#{status_id}")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue