Fix circular dependency condition with current_application_settings

`current_application_settings` used by `influx_metrics_enabled`
executed a markdown parsing code that was measured using `Gitlab::Metrics.measure`

But since the Gitlab::Metrics::InfluxDb was not yet build so Gitlab::Metrics
did not yet have `measure` method. Causing the NoMethodError.

However If run was successful at least once then result was cached in a file and this code never executed again.
Which caused this issue to only show up in CI preparation step.
This commit is contained in:
Pawel Chojnacki 2017-06-01 01:46:19 +02:00
parent b668aaf426
commit 68b946e3c8

View file

@ -1,7 +1,11 @@
module Gitlab
module Metrics
module InfluxDb
include Gitlab::CurrentSettings
extend Gitlab::CurrentSettings
extend self
MUTEX = Mutex.new
private_constant :MUTEX
def influx_metrics_enabled?
settings[:enabled] || false
@ -35,10 +39,6 @@ module Gitlab
@method_call_threshold ||= settings[:method_call_threshold]
end
def pool
@pool
end
def submit_metrics(metrics)
prepared = prepare_metrics(metrics)
@ -149,8 +149,11 @@ module Gitlab
# When enabled this should be set before being used as the usual pattern
# "@foo ||= bar" is _not_ thread-safe.
def pool
if influx_metrics_enabled?
@pool = ConnectionPool.new(size: settings[:pool_size], timeout: settings[:timeout]) do
if @pool.nil?
MUTEX.synchronize do
@pool ||= ConnectionPool.new(size: settings[:pool_size], timeout: settings[:timeout]) do
host = settings[:host]
port = settings[:port]
@ -159,5 +162,9 @@ module Gitlab
end
end
end
@pool
end
end
end
end
end