40 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
module Gitlab
 | 
						|
  module Git
 | 
						|
    module Storage
 | 
						|
      class FailureInfo
 | 
						|
        attr_accessor :first_failure, :last_failure, :failure_count
 | 
						|
 | 
						|
        def self.reset_all!
 | 
						|
          Gitlab::Git::Storage.redis.with do |redis|
 | 
						|
            all_storage_keys = redis.zrange(Gitlab::Git::Storage::REDIS_KNOWN_KEYS, 0, -1)
 | 
						|
            redis.del(*all_storage_keys) unless all_storage_keys.empty?
 | 
						|
          end
 | 
						|
 | 
						|
          RequestStore.delete(:circuitbreaker_cache)
 | 
						|
        end
 | 
						|
 | 
						|
        def self.load(cache_key)
 | 
						|
          first_failure, last_failure, failure_count = Gitlab::Git::Storage.redis.with do |redis|
 | 
						|
            redis.hmget(cache_key, :first_failure, :last_failure, :failure_count)
 | 
						|
          end
 | 
						|
 | 
						|
          last_failure = Time.at(last_failure.to_i) if last_failure.present?
 | 
						|
          first_failure = Time.at(first_failure.to_i) if first_failure.present?
 | 
						|
 | 
						|
          new(first_failure, last_failure, failure_count.to_i)
 | 
						|
        end
 | 
						|
 | 
						|
        def initialize(first_failure, last_failure, failure_count)
 | 
						|
          @first_failure = first_failure
 | 
						|
          @last_failure = last_failure
 | 
						|
          @failure_count = failure_count
 | 
						|
        end
 | 
						|
 | 
						|
        def no_failures?
 | 
						|
          first_failure.blank? && last_failure.blank? && failure_count == 0
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |