diff --git a/lib/gitlab/git/storage/circuit_breaker.rb b/lib/gitlab/git/storage/circuit_breaker.rb index c3ef82d4e98e9ed587894b5eababc37bc5675928..9ea9367d4b79a4203ff4ab9931d64703da7391b6 100644 --- a/lib/gitlab/git/storage/circuit_breaker.rb +++ b/lib/gitlab/git/storage/circuit_breaker.rb @@ -2,6 +2,8 @@ module Gitlab module Git module Storage class CircuitBreaker + FailureInfo = Struct.new(:last_failure, :failure_count) + attr_reader :storage, :hostname, :storage_path, @@ -10,6 +12,8 @@ module Gitlab :failure_reset_time, :storage_timeout + delegate :last_failure, :failure_count, to: :failure_info + def self.reset_all! pattern = "#{Gitlab::Git::Storage::REDIS_KEY_PREFIX}*" @@ -93,7 +97,7 @@ module Gitlab end def track_storage_inaccessible - @failure_info = [Time.now, failure_count + 1] + @failure_info = FailureInfo.new(Time.now, failure_count + 1) Gitlab::Git::Storage.redis.with do |redis| redis.pipelined do @@ -107,7 +111,7 @@ module Gitlab def track_storage_accessible return if no_failures? - @failure_info = [nil, 0] + @failure_info = FailureInfo.new(nil, 0) Gitlab::Git::Storage.redis.with do |redis| redis.pipelined do @@ -117,14 +121,6 @@ module Gitlab end end - def last_failure - failure_info.first - end - - def failure_count - failure_info.last - end - def failure_info @failure_info ||= get_failure_info end @@ -136,7 +132,7 @@ module Gitlab last_failure = Time.at(last_failure.to_i) if last_failure.present? - [last_failure, failure_count.to_i] + FailureInfo.new(last_failure, failure_count.to_i) end def cache_key