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