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)
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)
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)
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.'))