Merge branch '44582-clear-pipeline-status-cache' into 'master'
Allow `rake cache:clear` clearing pipeline status cache Closes #44582 See merge request gitlab-org/gitlab-ce!18257
This commit is contained in:
commit
a6a1b7310f
5 changed files with 40 additions and 11 deletions
|
@ -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
|
||||
|
||||
def self.cache_key_for_project(project)
|
||||
"projects/#{project.id}/pipeline_status"
|
||||
"#{Gitlab::Redis::Cache::CACHE_NAMESPACE}:projects/#{project.id}/pipeline_status"
|
||||
end
|
||||
|
||||
def self.update_for_pipeline(pipeline)
|
||||
|
|
|
@ -6,17 +6,22 @@ namespace :cache do
|
|||
desc "GitLab | Clear redis cache"
|
||||
task redis: :environment do
|
||||
Gitlab::Redis::Cache.with do |redis|
|
||||
cursor = REDIS_SCAN_START_STOP
|
||||
loop do
|
||||
cursor, keys = redis.scan(
|
||||
cursor,
|
||||
match: "#{Gitlab::Redis::Cache::CACHE_NAMESPACE}*",
|
||||
count: REDIS_CLEAR_BATCH_SIZE
|
||||
)
|
||||
cache_key_pattern = %W[#{Gitlab::Redis::Cache::CACHE_NAMESPACE}*
|
||||
projects/*/pipeline_status]
|
||||
|
||||
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
|
||||
|
|
|
@ -3,7 +3,7 @@ require 'spec_helper'
|
|||
describe Gitlab::Cache::Ci::ProjectPipelineStatus, :clean_gitlab_redis_cache do
|
||||
let!(:project) { create(:project, :repository) }
|
||||
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
|
||||
it "loads the status" do
|
||||
|
|
19
spec/tasks/cache/clear/redis_spec.rb
vendored
Normal file
19
spec/tasks/cache/clear/redis_spec.rb
vendored
Normal file
|
@ -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 a new issue