Commit 133dc875 authored by Thong Kuah's avatar Thong Kuah

Merge branch 'sh-cache-feature-flag-names' into 'master'

Cache feature flag names in Redis for a minute

Closes #63435

See merge request gitlab-org/gitlab-ce!29816
parents 5ee6771c 1b0c71ef
---
title: Cache feature flag names in Redis for a minute
merge_request: 29816
author:
type: performance
......@@ -30,7 +30,12 @@ class Feature
end
def persisted_names
Gitlab::SafeRequestStore[:flipper_persisted_names] ||= FlipperFeature.feature_names
Gitlab::SafeRequestStore[:flipper_persisted_names] ||=
begin
# We saw on GitLab.com, this database request was called 2300
# times/s. Let's cache it for a minute to avoid that load.
Rails.cache.fetch('flipper:persisted_names', expires_in: 1.minute) { FlipperFeature.feature_names }
end
end
def persisted?(feature)
......
......@@ -31,7 +31,8 @@ describe Feature do
expect(described_class.persisted_names).to be_empty
end
it 'caches the feature names when request store is active', :request_store do
it 'caches the feature names when request store is active',
:request_store, :use_clean_rails_memory_store_caching do
Feature::FlipperFeature.create!(key: 'foo')
expect(Feature::FlipperFeature)
......@@ -39,6 +40,12 @@ describe Feature do
.once
.and_call_original
expect(Rails.cache)
.to receive(:fetch)
.once
.with('flipper:persisted_names', expires_in: 1.minute)
.and_call_original
2.times do
expect(described_class.persisted_names).to eq(%w[foo])
end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment