Method: Semian::CircuitBreaker#acquire

Defined in:
lib/semian/circuit_breaker.rb

#acquire(resource = nil, &block) ⇒ Object

Raises:



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/semian/circuit_breaker.rb', line 43

def acquire(resource = nil, &block)
  transition_to_half_open if transition_to_half_open?

  raise OpenCircuitError unless request_allowed?

  result = nil
  begin
    result = maybe_with_half_open_resource_timeout(resource, &block)
  rescue *@exceptions => error
    if !error.respond_to?(:marks_semian_circuits?) || error.marks_semian_circuits?
      mark_failed(error)
    end
    raise error
  else
    mark_success
  end
  result
end