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
					
				@ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user