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/gitlab/ci/yaml_processor/feature_flags.rb')
-rw-r--r--lib/gitlab/ci/yaml_processor/feature_flags.rb27
1 files changed, 24 insertions, 3 deletions
diff --git a/lib/gitlab/ci/yaml_processor/feature_flags.rb b/lib/gitlab/ci/yaml_processor/feature_flags.rb
index f03db9d0e6b..50d37f6e4a0 100644
--- a/lib/gitlab/ci/yaml_processor/feature_flags.rb
+++ b/lib/gitlab/ci/yaml_processor/feature_flags.rb
@@ -5,10 +5,10 @@ module Gitlab
class YamlProcessor
module FeatureFlags
ACTOR_KEY = 'ci_yaml_processor_feature_flag_actor'
+ CORRECT_USAGE_KEY = 'ci_yaml_processor_feature_flag_correct_usage'
NO_ACTOR_VALUE = :no_actor
-
- NoActorError = Class.new(StandardError)
NO_ACTOR_MESSAGE = "Actor not set. Ensure to call `enabled?` inside `with_actor` block"
+ NoActorError = Class.new(StandardError)
class << self
# Cache a feature flag actor as thread local variable so
@@ -31,6 +31,15 @@ module Gitlab
::Feature.enabled?(feature_flag, current_actor)
end
+ def ensure_correct_usage
+ previous = Thread.current[CORRECT_USAGE_KEY]
+ Thread.current[CORRECT_USAGE_KEY] = true
+
+ yield
+ ensure
+ Thread.current[CORRECT_USAGE_KEY] = previous
+ end
+
private
def current_actor
@@ -39,10 +48,22 @@ module Gitlab
value
rescue NoActorError => e
- Gitlab::ErrorTracking.track_and_raise_for_dev_exception(e)
+ handle_missing_actor(e)
nil
end
+
+ def handle_missing_actor(exception)
+ if ensure_correct_usage?
+ Gitlab::ErrorTracking.track_and_raise_for_dev_exception(exception)
+ else
+ Gitlab::ErrorTracking.track_exception(exception)
+ end
+ end
+
+ def ensure_correct_usage?
+ Thread.current[CORRECT_USAGE_KEY] == true
+ end
end
end
end