Exemple #1
0
 def decorator(*args, **kwargs):
     try:
         return func(*args, **kwargs)
     except StructuredThriftTransportException as e:
         if not is_ha_enabled():
             raise PopupException(_(
                 'Failed to connect to Sentry server %s, and Sentry HA is not enabled.'
             ) % args[0].client.host,
                                  detail=e)
         else:
             LOG.warn(
                 "Failed to connect to Sentry server %s, will attempt to find next available host."
                 % args[0].client.host)
             server, attempts = get_next_available_server(
                 SentryClient, args[0].client.username, args[0].client.host)
             if server is not None:
                 args[0].client = create_client(SentryClient,
                                                args[0].client.username,
                                                server)
                 set_api_cache(server)
                 return func(*args, **kwargs)
             else:
                 raise PopupException(
                     _('Failed to find an available Sentry server.'))
     except (SentryException, PopupException) as e:
         raise e
     except Exception as e:
         raise PopupException(
             _('Encountered unexpected error in SentryApi.'), detail=e)
Exemple #2
0
  def test_round_robin(self):
    # Test that get_next_available_client will check each server once and only once then exit
    xml = self._sentry_site_xml(rpc_addresses='host-1,host-2,host-3,host-4,host-5', rpc_port=self.rpc_port)
    file(os.path.join(self.tmpdir, 'sentry-site.xml'), 'w').write(xml)
    sentry_site.reset()

    server, attempts = get_next_available_server(SentryClient, self.user.username, failed_host='host-1')
    assert_equal(None, server)
    assert_equal(['host-2','host-3','host-4','host-5'], attempts)
Exemple #3
0
  def test_good_bad_host(self):
    # Test that get_next_available_client will return the good host
    xml = self._sentry_site_xml(rpc_addresses='good-host-1,bad-host-1', rpc_port=self.rpc_port)
    file(os.path.join(self.tmpdir, 'sentry-site.xml'), 'w').write(xml)
    sentry_site.reset()

    server, attempts = get_next_available_server(SentryClient, self.user.username, failed_host='bad-host-1',
                                                 create_client_fn=create_mock_client_fn)
    assert_equal('good-host-1', server['hostname'])
    assert_equal([], attempts)
Exemple #4
0
 def decorator(*args, **kwargs):
   try:
     return func(*args, **kwargs)
   except StructuredThriftTransportException, e:
     if not is_ha_enabled():
       raise PopupException(_('Failed to connect to Sentry server %s, and Sentry HA is not enabled.') % args[0].client.host, detail=e)
     else:
       LOG.warn("Failed to connect to Sentry server %s, will attempt to find next available host." % args[0].client.host)
       server, attempts = get_next_available_server(client_class=SentryClient, username=args[0].client.username, failed_host=args[0].client.host, component=args[0].client.component)
       if server is not None:
         args[0].client = create_client(SentryClient, args[0].client.username, server, args[0].client.component)
         set_api_cache(server)
         return func(*args, **kwargs)
       else:
         raise PopupException(_('Failed to find an available Sentry server.'))