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:
		| @@ -130,6 +130,7 @@ class MediaAttachment < ApplicationRecord | ||||
|     "#{x},#{y}" | ||||
|   end | ||||
|  | ||||
|   after_commit :reset_parent_cache, on: :update | ||||
|   before_create :prepare_description, unless: :local? | ||||
|   before_create :set_shortcode | ||||
|   before_post_process :set_type_and_extension | ||||
| @@ -230,4 +231,9 @@ class MediaAttachment < ApplicationRecord | ||||
|       bitrate: movie.bitrate, | ||||
|     } | ||||
|   end | ||||
|  | ||||
|   def reset_parent_cache | ||||
|     return if status_id.nil? | ||||
|     Rails.cache.delete("statuses/#{status_id}") | ||||
|   end | ||||
| end | ||||
|   | ||||
| @@ -240,10 +240,6 @@ class Status < ApplicationRecord | ||||
|   before_validation :set_local | ||||
|  | ||||
|   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 | ||||
|       visibilities.keys - %w(direct limited) | ||||
|     end | ||||
|   | ||||
| @@ -14,4 +14,12 @@ | ||||
|  | ||||
| class StatusStat < ApplicationRecord | ||||
|   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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user