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}" | ||||
|   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 a new issue