Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/feature.rb')
-rw-r--r--lib/feature.rb19
1 files changed, 18 insertions, 1 deletions
diff --git a/lib/feature.rb b/lib/feature.rb
index 8186fbc40fa..f301f206b46 100644
--- a/lib/feature.rb
+++ b/lib/feature.rb
@@ -83,7 +83,12 @@ class Feature
# `persisted?` can potentially generate DB queries and also checks for inclusion
# in an array of feature names (177 at last count), possibly reducing performance by half.
# So we only perform the `persisted` check if `default_enabled: true`
- !default_enabled || Feature.persisted_name?(feature.name) ? feature.enabled?(thing) : true
+ feature_value = !default_enabled || Feature.persisted_name?(feature.name) ? feature.enabled?(thing) : true
+
+ # If we don't filter out this flag here we will enter an infinite loop
+ log_feature_flag_state(key, feature_value) if log_feature_flag_states?(key)
+
+ feature_value
end
def disabled?(key, thing = nil, type: :development, default_enabled: false)
@@ -153,6 +158,18 @@ class Feature
@logger ||= Feature::Logger.build
end
+ def log_feature_flag_states?(key)
+ Feature::Definition.log_states?(key)
+ end
+
+ def log_feature_flag_state(key, feature_value)
+ logged_states[key] ||= feature_value
+ end
+
+ def logged_states
+ RequestStore.fetch(:feature_flag_events) { {} }
+ end
+
private
def flipper