From 53dc9e83c34b2a0ee2651046de031566f5b925d2 Mon Sep 17 00:00:00 2001 From: Pawel Chojnacki Date: Thu, 7 Dec 2017 19:49:44 +0100 Subject: [PATCH 01/10] Cache feature check for 5 minutes for MethodCall instrumentation toggle --- lib/gitlab/metrics/method_call.rb | 4 +++- spec/lib/gitlab/metrics/method_call_spec.rb | 11 +++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/gitlab/metrics/method_call.rb b/lib/gitlab/metrics/method_call.rb index 65d55576ac2..ab7e7a06a77 100644 --- a/lib/gitlab/metrics/method_call.rb +++ b/lib/gitlab/metrics/method_call.rb @@ -72,7 +72,9 @@ module Gitlab end def call_measurement_enabled? - Feature.get(:prometheus_metrics_method_instrumentation).enabled? + Rails.cache.fetch(:prometheus_metrics_method_instrumentation_enabled, expires_in: 5.minutes) do + Feature.get(:prometheus_metrics_method_instrumentation).enabled? + end end end end diff --git a/spec/lib/gitlab/metrics/method_call_spec.rb b/spec/lib/gitlab/metrics/method_call_spec.rb index 5341addf911..df4c5167497 100644 --- a/spec/lib/gitlab/metrics/method_call_spec.rb +++ b/spec/lib/gitlab/metrics/method_call_spec.rb @@ -23,6 +23,17 @@ describe Gitlab::Metrics::MethodCall do Feature.get(:prometheus_metrics_method_instrumentation).enable end + it 'feature check is cached for 5 minutes' do + allow(Feature.get(:prometheus_metrics_method_instrumentation)).to receive(:enabled?).and_call_original + allow(Rails.cache).to receive(:fetch).and_call_original + + method_call.measure { 'foo' } + method_call.measure { 'foo' } + + expect(Feature.get(:prometheus_metrics_method_instrumentation)).to have_received(:enabled?).twice + expect(Rails.cache).to have_received(:fetch).with(:prometheus_metrics_method_instrumentation_enabled, expires_in: 5.minutes).twice + end + it 'observes the performance of the supplied block' do expect(described_class.call_duration_histogram) .to receive(:observe) From b503e6ff423699f7556fb948051e9c180a7b89f0 Mon Sep 17 00:00:00 2001 From: Pawel Chojnacki Date: Fri, 8 Dec 2017 19:36:30 +0100 Subject: [PATCH 02/10] Implement simple in memory cache that expires after 5 minutes --- lib/gitlab/metrics/method_call.rb | 26 +++++++++++++----- spec/lib/gitlab/metrics/method_call_spec.rb | 30 ++++++++++++++++----- 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/lib/gitlab/metrics/method_call.rb b/lib/gitlab/metrics/method_call.rb index ab7e7a06a77..744c489d46e 100644 --- a/lib/gitlab/metrics/method_call.rb +++ b/lib/gitlab/metrics/method_call.rb @@ -18,6 +18,24 @@ module Gitlab end end + def self.call_measurement_enabled? + return @call_measurement_enabled unless call_measurement_enabled_cache_expired? + MUTEX.synchronize do + return @call_measurement_enabled unless call_measurement_enabled_cache_expired? + @call_measurement_enabled_cache_expires_at = Time.now + 5.minutes + @call_measurement_enabled = Feature.get(:prometheus_metrics_method_instrumentation).enabled? + end + end + + def self.call_measurement_enabled_cache_expired? + @call_measurement_enabled.nil? || @call_measurement_enabled_cache_expires_at.nil? || @call_measurement_enabled_cache_expires_at < Time.now + end + + def self.call_measurement_enabled_cache_expire + @call_measurement_enabled = nil + @call_measurement_enabled_cache_expires_at = nil + end + # name - The full name of the method (including namespace) such as # `User#sign_in`. # @@ -45,7 +63,7 @@ module Gitlab @cpu_time += cpu_time @call_count += 1 - if call_measurement_enabled? && above_threshold? + if self.class.call_measurement_enabled? && above_threshold? self.class.call_duration_histogram.observe(@transaction.labels.merge(labels), real_time / 1000.0) end @@ -70,12 +88,6 @@ module Gitlab def above_threshold? real_time >= Metrics.method_call_threshold end - - def call_measurement_enabled? - Rails.cache.fetch(:prometheus_metrics_method_instrumentation_enabled, expires_in: 5.minutes) do - Feature.get(:prometheus_metrics_method_instrumentation).enabled? - end - end end end end diff --git a/spec/lib/gitlab/metrics/method_call_spec.rb b/spec/lib/gitlab/metrics/method_call_spec.rb index df4c5167497..f514fdd70ed 100644 --- a/spec/lib/gitlab/metrics/method_call_spec.rb +++ b/spec/lib/gitlab/metrics/method_call_spec.rb @@ -20,18 +20,35 @@ describe Gitlab::Metrics::MethodCall do context 'prometheus instrumentation is enabled' do before do + allow(Feature.get(:prometheus_metrics_method_instrumentation)).to receive(:enabled?).and_call_original + described_class.call_measurement_enabled_cache_expire Feature.get(:prometheus_metrics_method_instrumentation).enable end - it 'feature check is cached for 5 minutes' do - allow(Feature.get(:prometheus_metrics_method_instrumentation)).to receive(:enabled?).and_call_original - allow(Rails.cache).to receive(:fetch).and_call_original + around do |example| + Timecop.freeze do + example.run + end + end - method_call.measure { 'foo' } - method_call.measure { 'foo' } + it 'caches subsequent invocations of feature check' do + 10.times do + method_call.measure { 'foo' } + end + + expect(Feature.get(:prometheus_metrics_method_instrumentation)).to have_received(:enabled?).once + end + + it 'expires feature check cache after 5 minutes' do + 10.times do + method_call.measure { 'foo' } + end + + Timecop.travel(Time.now + 5.minutes) do + method_call.measure { 'foo' } + end expect(Feature.get(:prometheus_metrics_method_instrumentation)).to have_received(:enabled?).twice - expect(Rails.cache).to have_received(:fetch).with(:prometheus_metrics_method_instrumentation_enabled, expires_in: 5.minutes).twice end it 'observes the performance of the supplied block' do @@ -45,6 +62,7 @@ describe Gitlab::Metrics::MethodCall do context 'prometheus instrumentation is disabled' do before do + described_class.call_measurement_enabled_cache_expire Feature.get(:prometheus_metrics_method_instrumentation).disable end From 6af849644dd097f7b41a26ca8b49d274444db196 Mon Sep 17 00:00:00 2001 From: Pawel Chojnacki Date: Fri, 8 Dec 2017 20:19:01 +0100 Subject: [PATCH 03/10] Set cache expire only once the cache is filled, to avoid situation where old result is returned in parallel thread. --- lib/gitlab/metrics/method_call.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/gitlab/metrics/method_call.rb b/lib/gitlab/metrics/method_call.rb index 744c489d46e..2f5c45966ff 100644 --- a/lib/gitlab/metrics/method_call.rb +++ b/lib/gitlab/metrics/method_call.rb @@ -20,10 +20,13 @@ module Gitlab def self.call_measurement_enabled? return @call_measurement_enabled unless call_measurement_enabled_cache_expired? + MUTEX.synchronize do return @call_measurement_enabled unless call_measurement_enabled_cache_expired? - @call_measurement_enabled_cache_expires_at = Time.now + 5.minutes + @call_measurement_enabled = Feature.get(:prometheus_metrics_method_instrumentation).enabled? + @call_measurement_enabled_cache_expires_at = Time.now + 5.minutes + @call_measurement_enabled end end From 5904b033dba553636ae2a06cbf1469d8f19df040 Mon Sep 17 00:00:00 2001 From: Pawel Chojnacki Date: Mon, 11 Dec 2017 22:24:07 +0100 Subject: [PATCH 04/10] Implemente measurement enabled cache using AtomicReference --- lib/gitlab/metrics/method_call.rb | 31 +++++++++------------ spec/lib/gitlab/metrics/method_call_spec.rb | 4 +-- 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/lib/gitlab/metrics/method_call.rb b/lib/gitlab/metrics/method_call.rb index 2f5c45966ff..dc56a10957d 100644 --- a/lib/gitlab/metrics/method_call.rb +++ b/lib/gitlab/metrics/method_call.rb @@ -2,6 +2,7 @@ module Gitlab module Metrics # Class for tracking timing information about method calls class MethodCall + MEASUREMENT_ENABLED_CACHE = Concurrent::AtomicReference.new({ enabled: false, expires_at: Time.now }) MUTEX = Mutex.new BASE_LABELS = { module: nil, method: nil }.freeze attr_reader :real_time, :cpu_time, :call_count, :labels @@ -18,25 +19,19 @@ module Gitlab end end - def self.call_measurement_enabled? - return @call_measurement_enabled unless call_measurement_enabled_cache_expired? - - MUTEX.synchronize do - return @call_measurement_enabled unless call_measurement_enabled_cache_expired? - - @call_measurement_enabled = Feature.get(:prometheus_metrics_method_instrumentation).enabled? - @call_measurement_enabled_cache_expires_at = Time.now + 5.minutes - @call_measurement_enabled + def call_measurement_enabled? + res = MEASUREMENT_ENABLED_CACHE.update do |cache| + if cache[:expires_at] < Time.now + { + enabled: Feature.get(:prometheus_metrics_method_instrumentation).enabled?, + expires_at: Time.now + 5.minutes + } + else + cache + end end - end - def self.call_measurement_enabled_cache_expired? - @call_measurement_enabled.nil? || @call_measurement_enabled_cache_expires_at.nil? || @call_measurement_enabled_cache_expires_at < Time.now - end - - def self.call_measurement_enabled_cache_expire - @call_measurement_enabled = nil - @call_measurement_enabled_cache_expires_at = nil + res[:enabled] end # name - The full name of the method (including namespace) such as @@ -66,7 +61,7 @@ module Gitlab @cpu_time += cpu_time @call_count += 1 - if self.class.call_measurement_enabled? && above_threshold? + if call_measurement_enabled? && above_threshold? self.class.call_duration_histogram.observe(@transaction.labels.merge(labels), real_time / 1000.0) end diff --git a/spec/lib/gitlab/metrics/method_call_spec.rb b/spec/lib/gitlab/metrics/method_call_spec.rb index f514fdd70ed..eca6a2cb54a 100644 --- a/spec/lib/gitlab/metrics/method_call_spec.rb +++ b/spec/lib/gitlab/metrics/method_call_spec.rb @@ -21,7 +21,7 @@ describe Gitlab::Metrics::MethodCall do context 'prometheus instrumentation is enabled' do before do allow(Feature.get(:prometheus_metrics_method_instrumentation)).to receive(:enabled?).and_call_original - described_class.call_measurement_enabled_cache_expire + described_class::MEASUREMENT_ENABLED_CACHE.set({enabled: false, expires_at: Time.now - 1.second}) Feature.get(:prometheus_metrics_method_instrumentation).enable end @@ -62,7 +62,7 @@ describe Gitlab::Metrics::MethodCall do context 'prometheus instrumentation is disabled' do before do - described_class.call_measurement_enabled_cache_expire + described_class::MEASUREMENT_ENABLED_CACHE.set({enabled: false, expires_at: Time.now}) Feature.get(:prometheus_metrics_method_instrumentation).disable end From 408208bc2b75d28235092e9bb3821242fdad08fb Mon Sep 17 00:00:00 2001 From: Pawel Chojnacki Date: Mon, 11 Dec 2017 23:39:40 +0100 Subject: [PATCH 05/10] Use AtomicFixNum to implement CAS isolated cache update. i.e. Using compare and swap we update the expires_at value. The thread that actually is able to update this value will also set the cache holding method_call enabled state --- lib/gitlab/metrics/method_call.rb | 17 +++++++---------- spec/lib/gitlab/metrics/method_call_spec.rb | 13 +++++++++---- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/lib/gitlab/metrics/method_call.rb b/lib/gitlab/metrics/method_call.rb index dc56a10957d..2c1cb789314 100644 --- a/lib/gitlab/metrics/method_call.rb +++ b/lib/gitlab/metrics/method_call.rb @@ -2,7 +2,8 @@ module Gitlab module Metrics # Class for tracking timing information about method calls class MethodCall - MEASUREMENT_ENABLED_CACHE = Concurrent::AtomicReference.new({ enabled: false, expires_at: Time.now }) + MEASUREMENT_ENABLED_CACHE = Concurrent::AtomicBoolean.new(false) + MEASUREMENT_ENABLED_CACHE_EXPIRES_AT = Concurrent::AtomicFixnum.new(Time.now.to_i) MUTEX = Mutex.new BASE_LABELS = { module: nil, method: nil }.freeze attr_reader :real_time, :cpu_time, :call_count, :labels @@ -20,18 +21,14 @@ module Gitlab end def call_measurement_enabled? - res = MEASUREMENT_ENABLED_CACHE.update do |cache| - if cache[:expires_at] < Time.now - { - enabled: Feature.get(:prometheus_metrics_method_instrumentation).enabled?, - expires_at: Time.now + 5.minutes - } - else - cache + expires_at = MEASUREMENT_ENABLED_CACHE_EXPIRES_AT.value + if expires_at < Time.now.to_i + if MEASUREMENT_ENABLED_CACHE_EXPIRES_AT.compare_and_set(expires_at, (Time.now + 30.seconds).to_i) + MEASUREMENT_ENABLED_CACHE.value = Feature.get(:prometheus_metrics_method_instrumentation).enabled? end end - res[:enabled] + MEASUREMENT_ENABLED_CACHE.value end # name - The full name of the method (including namespace) such as diff --git a/spec/lib/gitlab/metrics/method_call_spec.rb b/spec/lib/gitlab/metrics/method_call_spec.rb index eca6a2cb54a..5ce62504245 100644 --- a/spec/lib/gitlab/metrics/method_call_spec.rb +++ b/spec/lib/gitlab/metrics/method_call_spec.rb @@ -21,7 +21,7 @@ describe Gitlab::Metrics::MethodCall do context 'prometheus instrumentation is enabled' do before do allow(Feature.get(:prometheus_metrics_method_instrumentation)).to receive(:enabled?).and_call_original - described_class::MEASUREMENT_ENABLED_CACHE.set({enabled: false, expires_at: Time.now - 1.second}) + described_class::MEASUREMENT_ENABLED_CACHE_EXPIRES_AT.value = Time.now.to_i - 1 Feature.get(:prometheus_metrics_method_instrumentation).enable end @@ -39,12 +39,16 @@ describe Gitlab::Metrics::MethodCall do expect(Feature.get(:prometheus_metrics_method_instrumentation)).to have_received(:enabled?).once end - it 'expires feature check cache after 5 minutes' do + it 'expires feature check cache after 30 seconds' do 10.times do method_call.measure { 'foo' } end - Timecop.travel(Time.now + 5.minutes) do + Timecop.travel(Time.now + 30.seconds) do + method_call.measure { 'foo' } + end + + Timecop.travel(Time.now + 31.seconds) do method_call.measure { 'foo' } end @@ -62,7 +66,8 @@ describe Gitlab::Metrics::MethodCall do context 'prometheus instrumentation is disabled' do before do - described_class::MEASUREMENT_ENABLED_CACHE.set({enabled: false, expires_at: Time.now}) + described_class::MEASUREMENT_ENABLED_CACHE_EXPIRES_AT.value = Time.now.to_i - 1 + Feature.get(:prometheus_metrics_method_instrumentation).disable end From ca176a9bfe2ce9555da16e134bb92779b85952ad Mon Sep 17 00:00:00 2001 From: Pawel Chojnacki Date: Mon, 11 Dec 2017 23:52:28 +0100 Subject: [PATCH 06/10] move call_measurement_enabled? method to the bottom of the file --- lib/gitlab/metrics/method_call.rb | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/gitlab/metrics/method_call.rb b/lib/gitlab/metrics/method_call.rb index 2c1cb789314..a6900225a27 100644 --- a/lib/gitlab/metrics/method_call.rb +++ b/lib/gitlab/metrics/method_call.rb @@ -20,17 +20,6 @@ module Gitlab end end - def call_measurement_enabled? - expires_at = MEASUREMENT_ENABLED_CACHE_EXPIRES_AT.value - if expires_at < Time.now.to_i - if MEASUREMENT_ENABLED_CACHE_EXPIRES_AT.compare_and_set(expires_at, (Time.now + 30.seconds).to_i) - MEASUREMENT_ENABLED_CACHE.value = Feature.get(:prometheus_metrics_method_instrumentation).enabled? - end - end - - MEASUREMENT_ENABLED_CACHE.value - end - # name - The full name of the method (including namespace) such as # `User#sign_in`. # @@ -83,6 +72,17 @@ module Gitlab def above_threshold? real_time >= Metrics.method_call_threshold end + + def call_measurement_enabled? + expires_at = MEASUREMENT_ENABLED_CACHE_EXPIRES_AT.value + if expires_at < Time.now.to_i + if MEASUREMENT_ENABLED_CACHE_EXPIRES_AT.compare_and_set(expires_at, (Time.now + 30.seconds).to_i) + MEASUREMENT_ENABLED_CACHE.value = Feature.get(:prometheus_metrics_method_instrumentation).enabled? + end + end + + MEASUREMENT_ENABLED_CACHE.value + end end end end From fd0a5168542f3a69815c99dc21f39587064f872d Mon Sep 17 00:00:00 2001 From: Pawel Chojnacki Date: Tue, 12 Dec 2017 00:23:56 +0100 Subject: [PATCH 07/10] use class variables instead of CONSTANTs --- lib/gitlab/metrics/method_call.rb | 16 ++++++++++------ spec/lib/gitlab/metrics/method_call_spec.rb | 4 ++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/lib/gitlab/metrics/method_call.rb b/lib/gitlab/metrics/method_call.rb index a6900225a27..a844100e5a8 100644 --- a/lib/gitlab/metrics/method_call.rb +++ b/lib/gitlab/metrics/method_call.rb @@ -2,8 +2,8 @@ module Gitlab module Metrics # Class for tracking timing information about method calls class MethodCall - MEASUREMENT_ENABLED_CACHE = Concurrent::AtomicBoolean.new(false) - MEASUREMENT_ENABLED_CACHE_EXPIRES_AT = Concurrent::AtomicFixnum.new(Time.now.to_i) + @@measurement_enabled_cache = Concurrent::AtomicBoolean.new(false) + @@measurement_enabled_cache_expires_at = Concurrent::AtomicFixnum.new(Time.now.to_i) MUTEX = Mutex.new BASE_LABELS = { module: nil, method: nil }.freeze attr_reader :real_time, :cpu_time, :call_count, :labels @@ -20,6 +20,10 @@ module Gitlab end end + def self.measurement_enabled_cache_expires_at + @@measurement_enabled_cache_expires_at + end + # name - The full name of the method (including namespace) such as # `User#sign_in`. # @@ -74,14 +78,14 @@ module Gitlab end def call_measurement_enabled? - expires_at = MEASUREMENT_ENABLED_CACHE_EXPIRES_AT.value + expires_at = @@measurement_enabled_cache_expires_at.value if expires_at < Time.now.to_i - if MEASUREMENT_ENABLED_CACHE_EXPIRES_AT.compare_and_set(expires_at, (Time.now + 30.seconds).to_i) - MEASUREMENT_ENABLED_CACHE.value = Feature.get(:prometheus_metrics_method_instrumentation).enabled? + if @@measurement_enabled_cache_expires_at.compare_and_set(expires_at, (Time.now + 30.seconds).to_i) + @@measurement_enabled_cache.value = Feature.get(:prometheus_metrics_method_instrumentation).enabled? end end - MEASUREMENT_ENABLED_CACHE.value + @@measurement_enabled_cache.value end end end diff --git a/spec/lib/gitlab/metrics/method_call_spec.rb b/spec/lib/gitlab/metrics/method_call_spec.rb index 5ce62504245..f98d7e48b17 100644 --- a/spec/lib/gitlab/metrics/method_call_spec.rb +++ b/spec/lib/gitlab/metrics/method_call_spec.rb @@ -21,7 +21,7 @@ describe Gitlab::Metrics::MethodCall do context 'prometheus instrumentation is enabled' do before do allow(Feature.get(:prometheus_metrics_method_instrumentation)).to receive(:enabled?).and_call_original - described_class::MEASUREMENT_ENABLED_CACHE_EXPIRES_AT.value = Time.now.to_i - 1 + described_class.measurement_enabled_cache_expires_at.value = Time.now.to_i - 1 Feature.get(:prometheus_metrics_method_instrumentation).enable end @@ -66,7 +66,7 @@ describe Gitlab::Metrics::MethodCall do context 'prometheus instrumentation is disabled' do before do - described_class::MEASUREMENT_ENABLED_CACHE_EXPIRES_AT.value = Time.now.to_i - 1 + described_class.measurement_enabled_cache_expires_at.value = Time.now.to_i - 1 Feature.get(:prometheus_metrics_method_instrumentation).disable end From da19ce625ba8a0db9921fd85e331e70b14a5625b Mon Sep 17 00:00:00 2001 From: Pawel Chojnacki Date: Tue, 12 Dec 2017 18:52:08 +0100 Subject: [PATCH 08/10] Expire feature flag cache after 1minute --- lib/gitlab/metrics/method_call.rb | 2 +- spec/lib/gitlab/metrics/method_call_spec.rb | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/lib/gitlab/metrics/method_call.rb b/lib/gitlab/metrics/method_call.rb index a844100e5a8..c58e54916e6 100644 --- a/lib/gitlab/metrics/method_call.rb +++ b/lib/gitlab/metrics/method_call.rb @@ -80,7 +80,7 @@ module Gitlab def call_measurement_enabled? expires_at = @@measurement_enabled_cache_expires_at.value if expires_at < Time.now.to_i - if @@measurement_enabled_cache_expires_at.compare_and_set(expires_at, (Time.now + 30.seconds).to_i) + if @@measurement_enabled_cache_expires_at.compare_and_set(expires_at, 1.minute.from_now.to_i) @@measurement_enabled_cache.value = Feature.get(:prometheus_metrics_method_instrumentation).enabled? end end diff --git a/spec/lib/gitlab/metrics/method_call_spec.rb b/spec/lib/gitlab/metrics/method_call_spec.rb index f98d7e48b17..c11da42ed29 100644 --- a/spec/lib/gitlab/metrics/method_call_spec.rb +++ b/spec/lib/gitlab/metrics/method_call_spec.rb @@ -40,15 +40,13 @@ describe Gitlab::Metrics::MethodCall do end it 'expires feature check cache after 30 seconds' do - 10.times do + method_call.measure { 'foo' } + + Timecop.travel(1.minute.from_now) do method_call.measure { 'foo' } end - Timecop.travel(Time.now + 30.seconds) do - method_call.measure { 'foo' } - end - - Timecop.travel(Time.now + 31.seconds) do + Timecop.travel(1.minute.from_now + 1.second) do method_call.measure { 'foo' } end From 51668d3e1faa448ceecf5457db552c89314c9dbe Mon Sep 17 00:00:00 2001 From: Pawel Chojnacki Date: Tue, 12 Dec 2017 22:30:27 +0100 Subject: [PATCH 09/10] Use class variable and add rubocop exception --- lib/gitlab/metrics/method_call.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/gitlab/metrics/method_call.rb b/lib/gitlab/metrics/method_call.rb index c58e54916e6..9112164f22e 100644 --- a/lib/gitlab/metrics/method_call.rb +++ b/lib/gitlab/metrics/method_call.rb @@ -1,3 +1,5 @@ +# rubocop:disable Style/ClassVars + module Gitlab module Metrics # Class for tracking timing information about method calls From db9e5bf75e8546649ddd65a5696ff4edb87ded20 Mon Sep 17 00:00:00 2001 From: Pawel Chojnacki Date: Wed, 13 Dec 2017 18:43:08 +0100 Subject: [PATCH 10/10] fix test case description --- spec/lib/gitlab/metrics/method_call_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/lib/gitlab/metrics/method_call_spec.rb b/spec/lib/gitlab/metrics/method_call_spec.rb index c11da42ed29..78767d06462 100644 --- a/spec/lib/gitlab/metrics/method_call_spec.rb +++ b/spec/lib/gitlab/metrics/method_call_spec.rb @@ -39,7 +39,7 @@ describe Gitlab::Metrics::MethodCall do expect(Feature.get(:prometheus_metrics_method_instrumentation)).to have_received(:enabled?).once end - it 'expires feature check cache after 30 seconds' do + it 'expires feature check cache after 1 minute' do method_call.measure { 'foo' } Timecop.travel(1.minute.from_now) do