Commit 3e898be8 authored by Pawel Chojnacki's avatar Pawel Chojnacki

Avoid cascading locking

parent 6ff9f028
......@@ -33,19 +33,25 @@ module Gitlab
options = MetricOptions.new(opts)
options.evaluate(&block)
if disabled_by_feature(options)
synchronized_cache_fill(name) { NullMetric.new }
else
synchronized_cache_fill(name) { build_metric!(type, name, options) }
end
end
def synchronized_cache_fill(key)
MUTEX.synchronize do
@_metrics_provider_cache ||= {}
@_metrics_provider_cache[name] ||= build_metric!(type, name, options)
@_metrics_provider_cache[key] ||= yield
end
end
@_metrics_provider_cache[name]
def disabled_by_feature(options)
options.with_feature && !Feature.get(options.with_feature).enabled?
end
def build_metric!(type, name, options)
unless options.with_feature.nil? || Feature.get(options.with_feature).enabled?
return NullMetric.new
end
case type
when :gauge
Gitlab::Metrics.gauge(name, options.docstring, options.base_labels, options.multiprocess_mode)
......
......@@ -128,5 +128,5 @@ describe Gitlab::Metrics::Concern do
include_examples 'metric', :counter, {}
include_examples 'metric', :gauge, {}, :all
include_examples 'metric', :histogram, {}, [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10]
include_examples 'metric', :histogram, {}, [0.005, 0.01, 0.1, 1, 10]
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