class Semian::CircuitBreaker
def acquire(resource = nil, &block)
def acquire(resource = nil, &block) return yield if disabled? 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