From 361c8be547342d6c297eaea51b007594e41bbdf1 Mon Sep 17 00:00:00 2001 From: Penar Musaraj Date: Fri, 16 Jul 2021 10:58:01 -0400 Subject: [PATCH] PERF: Add scheduled job to delete old stylesheet cache rows (#13747) --- .../scheduled/clean_up_stylesheet_cache.rb | 11 ++++++++++ app/models/stylesheet_cache.rb | 5 +++++ spec/models/stylesheet_cache_spec.rb | 22 ++++++++++++++++++- 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 app/jobs/scheduled/clean_up_stylesheet_cache.rb diff --git a/app/jobs/scheduled/clean_up_stylesheet_cache.rb b/app/jobs/scheduled/clean_up_stylesheet_cache.rb new file mode 100644 index 00000000000..51913a4f4b7 --- /dev/null +++ b/app/jobs/scheduled/clean_up_stylesheet_cache.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module Jobs + class CleanUpStylesheetCache < ::Jobs::Scheduled + every 1.week + + def execute(args) + StylesheetCache.clean_up + end + end +end diff --git a/app/models/stylesheet_cache.rb b/app/models/stylesheet_cache.rb index 03d921c0761..819f9ab3662 100644 --- a/app/models/stylesheet_cache.rb +++ b/app/models/stylesheet_cache.rb @@ -4,6 +4,7 @@ class StylesheetCache < ActiveRecord::Base self.table_name = 'stylesheet_cache' MAX_TO_KEEP = 50 + CLEANUP_AFTER_DAYS = 150 def self.add(target, digest, content, source_map, max_to_keep: nil) max_to_keep ||= MAX_TO_KEEP @@ -42,6 +43,10 @@ class StylesheetCache < ActiveRecord::Base end end + def self.clean_up + StylesheetCache.where('created_at < ?', CLEANUP_AFTER_DAYS.days.ago).delete_all + end + end # == Schema Information diff --git a/spec/models/stylesheet_cache_spec.rb b/spec/models/stylesheet_cache_spec.rb index c83f6c57869..d47e9150abc 100644 --- a/spec/models/stylesheet_cache_spec.rb +++ b/spec/models/stylesheet_cache_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' describe StylesheetCache do - describe "add" do + describe ".add" do it "correctly cycles once MAX_TO_KEEP is hit" do StylesheetCache.destroy_all @@ -37,6 +37,26 @@ describe StylesheetCache do expect(StylesheetCache.order(:id).pluck(:target)).to eq(["desktop", "desktop", "mobile", "mobile"]) end + end + describe ".clean_up" do + it "removes items older than threshold" do + StylesheetCache.destroy_all + + StylesheetCache.add("a", "b", "c", "map") + StylesheetCache.add("d", "e", "f", "map") + + above_threshold = StylesheetCache::CLEANUP_AFTER_DAYS - 1 + StylesheetCache.first.update!(created_at: above_threshold.days.ago) + + StylesheetCache.clean_up + expect(StylesheetCache.all.size).to eq(2) + + below_threshold = StylesheetCache::CLEANUP_AFTER_DAYS + 1 + StylesheetCache.first.update!(created_at: below_threshold.days.ago) + + StylesheetCache.clean_up + expect(StylesheetCache.all.size).to eq(1) + end end end