Allow `rake cache:clear` clearing pipeline status cache
* Use the correct key prefix * Clear old cache keys TODO: At some point we could remove clearing old cache keys.
This commit is contained in:
parent
de36ca81d3
commit
4b30aec0aa
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Now `rake cache:clear` will also clear pipeline status cache
|
||||||
|
merge_request: 18257
|
||||||
|
author:
|
||||||
|
type: fixed
|
|
@ -40,7 +40,7 @@ module Gitlab
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.cache_key_for_project(project)
|
def self.cache_key_for_project(project)
|
||||||
"projects/#{project.id}/pipeline_status"
|
"#{Gitlab::Redis::Cache::CACHE_NAMESPACE}:projects/#{project.id}/pipeline_status"
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.update_for_pipeline(pipeline)
|
def self.update_for_pipeline(pipeline)
|
||||||
|
|
|
@ -6,17 +6,22 @@ namespace :cache do
|
||||||
desc "GitLab | Clear redis cache"
|
desc "GitLab | Clear redis cache"
|
||||||
task redis: :environment do
|
task redis: :environment do
|
||||||
Gitlab::Redis::Cache.with do |redis|
|
Gitlab::Redis::Cache.with do |redis|
|
||||||
cursor = REDIS_SCAN_START_STOP
|
cache_key_pattern = %W[#{Gitlab::Redis::Cache::CACHE_NAMESPACE}*
|
||||||
loop do
|
projects/*/pipeline_status]
|
||||||
cursor, keys = redis.scan(
|
|
||||||
cursor,
|
|
||||||
match: "#{Gitlab::Redis::Cache::CACHE_NAMESPACE}*",
|
|
||||||
count: REDIS_CLEAR_BATCH_SIZE
|
|
||||||
)
|
|
||||||
|
|
||||||
redis.del(*keys) if keys.any?
|
cache_key_pattern.each do |match|
|
||||||
|
cursor = REDIS_SCAN_START_STOP
|
||||||
|
loop do
|
||||||
|
cursor, keys = redis.scan(
|
||||||
|
cursor,
|
||||||
|
match: match,
|
||||||
|
count: REDIS_CLEAR_BATCH_SIZE
|
||||||
|
)
|
||||||
|
|
||||||
break if cursor == REDIS_SCAN_START_STOP
|
redis.del(*keys) if keys.any?
|
||||||
|
|
||||||
|
break if cursor == REDIS_SCAN_START_STOP
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,7 +3,7 @@ require 'spec_helper'
|
||||||
describe Gitlab::Cache::Ci::ProjectPipelineStatus, :clean_gitlab_redis_cache do
|
describe Gitlab::Cache::Ci::ProjectPipelineStatus, :clean_gitlab_redis_cache do
|
||||||
let!(:project) { create(:project, :repository) }
|
let!(:project) { create(:project, :repository) }
|
||||||
let(:pipeline_status) { described_class.new(project) }
|
let(:pipeline_status) { described_class.new(project) }
|
||||||
let(:cache_key) { "projects/#{project.id}/pipeline_status" }
|
let(:cache_key) { described_class.cache_key_for_project(project) }
|
||||||
|
|
||||||
describe '.load_for_project' do
|
describe '.load_for_project' do
|
||||||
it "loads the status" do
|
it "loads the status" do
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
require 'rake_helper'
|
||||||
|
|
||||||
|
describe 'clearing redis cache' do
|
||||||
|
before do
|
||||||
|
Rake.application.rake_require 'tasks/cache'
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'clearing pipeline status cache' do
|
||||||
|
let(:pipeline_status) { create(:ci_pipeline).project.pipeline_status }
|
||||||
|
|
||||||
|
before do
|
||||||
|
allow(pipeline_status).to receive(:loaded).and_return(nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'clears pipeline status cache' do
|
||||||
|
expect { run_rake_task('cache:clear:redis') }.to change { pipeline_status.has_cache? }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue