From c7bcce429e704ef5d1deb24035eef541b0857959 Mon Sep 17 00:00:00 2001 From: evazion Date: Sat, 10 Aug 2019 21:35:38 -0500 Subject: [PATCH] Fix #4129: Remove tag alias caching. --- app/logical/tag_alias_correction.rb | 7 ------- app/models/tag_alias.rb | 27 +++----------------------- test/unit/tag_alias_correction_test.rb | 11 +---------- test/unit/tag_alias_test.rb | 22 +++++++-------------- 4 files changed, 11 insertions(+), 56 deletions(-) diff --git a/app/logical/tag_alias_correction.rb b/app/logical/tag_alias_correction.rb index 0f0ab2883..440d41a52 100644 --- a/app/logical/tag_alias_correction.rb +++ b/app/logical/tag_alias_correction.rb @@ -13,19 +13,12 @@ class TagAliasCorrection def statistics_hash @statistics_hash ||= { - "antecedent_cache" => Cache.get("ta:" + Cache.hash(tag_alias.antecedent_name)), - "consequent_cache" => Cache.get("ta:" + Cache.hash(tag_alias.consequent_name)), "antecedent_count" => Tag.find_by_name(tag_alias.antecedent_name).try(:post_count), "consequent_count" => Tag.find_by_name(tag_alias.consequent_name).try(:post_count) } end - def clear_cache - tag_alias.clear_all_cache - end - def fix! - clear_cache tag_alias.delay(:queue => "default").update_posts end end diff --git a/app/models/tag_alias.rb b/app/models/tag_alias.rb index 688f083df..8c1663a3d 100644 --- a/app/models/tag_alias.rb +++ b/app/models/tag_alias.rb @@ -1,28 +1,10 @@ class TagAlias < TagRelationship - after_save :clear_all_cache - after_destroy :clear_all_cache - after_save :clear_all_cache, if: ->(rec) {rec.is_retired?} after_save :create_mod_action validates_uniqueness_of :antecedent_name, scope: :status, conditions: -> { active } validate :absence_of_transitive_relation validate :wiki_pages_present, on: :create, unless: :skip_secondary_validations validate :mininum_antecedent_count, on: :create, unless: :skip_secondary_validations - module CacheMethods - extend ActiveSupport::Concern - - module ClassMethods - def clear_cache_for(name) - Cache.delete("ta:#{Cache.hash(name)}") - end - end - - def clear_all_cache - TagAlias.clear_cache_for(antecedent_name) - TagAlias.clear_cache_for(consequent_name) - end - end - module ApprovalMethods def approve!(update_topic: true, approver: CurrentUser.user) CurrentUser.scoped(approver) do @@ -50,7 +32,6 @@ class TagAlias < TagRelationship end end - include CacheMethods include ApprovalMethods include ForumMethods @@ -63,9 +44,9 @@ class TagAlias < TagRelationship end def self.to_aliased(names) - Cache.get_multi(Array(names), "ta") do |tag| - ActiveRecord::Base.select_value_sql("select consequent_name from tag_aliases where status in ('active', 'processing') and antecedent_name = ?", tag) || tag.to_s - end.values + names = Array(names) + aliases = active.where(antecedent_name: names).map { |ta| [ta.antecedent_name, ta.consequent_name] }.to_h + names.map { |name| aliases[name] || name } end def process!(update_topic: true) @@ -80,7 +61,6 @@ class TagAlias < TagRelationship update(status: "processing") move_aliases_and_implications move_saved_searches - clear_all_cache ensure_category_consistency update_posts forum_updater.update(approval_message(approver), "APPROVED") if update_topic @@ -197,7 +177,6 @@ class TagAlias < TagRelationship def reject!(update_topic: true) update(status: "deleted") - clear_all_cache forum_updater.update(reject_message(CurrentUser.user), "REJECTED") if update_topic end diff --git a/test/unit/tag_alias_correction_test.rb b/test/unit/tag_alias_correction_test.rb index 13cccebb7..0a41843cc 100644 --- a/test/unit/tag_alias_correction_test.rb +++ b/test/unit/tag_alias_correction_test.rb @@ -16,17 +16,13 @@ class TagAliasCorrectionTest < ActiveSupport::TestCase CurrentUser.ip_addr = nil end - context "with a bad cache and post counts" do + context "with a bad post count" do setup do - Cache.delete("ta:#{Cache.hash('bbb')}") - Cache.put("ta:#{Cache.hash('aaa')}", "zzz") Tag.where(:name => "aaa").update_all("post_count = -3") @correction = TagAliasCorrection.new(@tag_alias.id) end should "have the correct statistics hash" do - assert_equal("zzz", @correction.statistics_hash["antecedent_cache"]) - assert_nil(@correction.statistics_hash["consequent_cache"]) assert_equal(-3, @correction.statistics_hash["antecedent_count"]) assert_equal(1, @correction.statistics_hash["consequent_count"]) end @@ -44,11 +40,6 @@ class TagAliasCorrectionTest < ActiveSupport::TestCase context "that is fixed" do setup do @correction.fix! - TagAlias.to_aliased(["aaa"]) - end - - should "now have the correct cache" do - assert_equal("bbb", Cache.get("ta:#{Cache.hash('aaa')}")) end should "now have the correct count" do diff --git a/test/unit/tag_alias_test.rb b/test/unit/tag_alias_test.rb index 39ca38bf5..1c4933da2 100644 --- a/test/unit/tag_alias_test.rb +++ b/test/unit/tag_alias_test.rb @@ -106,22 +106,14 @@ class TagAliasTest < ActiveSupport::TestCase end should "convert a tag to its normalized version" do - tag1 = FactoryBot.create(:tag, :name => "aaa") - tag2 = FactoryBot.create(:tag, :name => "bbb") - ta = FactoryBot.create(:tag_alias, :antecedent_name => "aaa", :consequent_name => "bbb") - normalized_tags = TagAlias.to_aliased(["aaa", "ccc"]) - assert_equal(["bbb", "ccc"], normalized_tags.sort) - end + tag1 = create(:tag, name: "aaa") + tag2 = create(:tag, name: "bbb") + ta = create(:tag_alias, antecedent_name: "aaa", consequent_name: "bbb") - should "update the cache" do - tag1 = FactoryBot.create(:tag, :name => "aaa") - tag2 = FactoryBot.create(:tag, :name => "bbb") - ta = FactoryBot.create(:tag_alias, :antecedent_name => "aaa", :consequent_name => "bbb") - assert_nil(Cache.get("ta:#{Cache.hash("aaa")}")) - TagAlias.to_aliased(["aaa"]) - assert_equal("bbb", Cache.get("ta:#{Cache.hash("aaa")}")) - ta.destroy - assert_nil(Cache.get("ta:#{Cache.hash("aaa")}")) + assert_equal(["bbb"], TagAlias.to_aliased("aaa")) + assert_equal(["bbb", "ccc"], TagAlias.to_aliased(["aaa", "ccc"])) + assert_equal(["ccc", "bbb"], TagAlias.to_aliased(["ccc", "bbb"])) + assert_equal(["bbb", "bbb"], TagAlias.to_aliased(["aaa", "aaa"])) end context "saved searches" do