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 decorator(*args, **kwargs): retries = 0 seed = random.random() while retries <= MAX_RETRIES: try: return func(*args, **kwargs) except StructuredThriftTransportException, e: if not is_ha_enabled() or retries == MAX_RETRIES: raise PopupException(_( 'Failed to retry connecting to an available Sentry server.' ), detail=e) else: LOG.info( 'Could not connect to Sentry server %s, attempting to fetch next available client.' % args[0].client.host) time.sleep(1) args[0].client = get_cached_client(args[0].client.username, retries=retries, seed=seed) LOG.info('Picked %s at attempt %s' % (args[0].client, retries)) retries += 1 except SentryException, e: raise e
def test_no_rpc_hosts(self): # Test with no rpc hosts and fallback to hostname and port xml = self._sentry_site_xml(rpc_addresses='') file(os.path.join(self.tmpdir, 'sentry-site.xml'), 'w').write(xml) sentry_site.reset() api = get_api(self.user) assert_false(sentry_site.is_ha_enabled(), sentry_site.get_sentry_server_rpc_addresses()) assert_true(is_enabled() and HOSTNAME.get() and HOSTNAME.get() != 'localhost') resp = api.list_sentry_roles_by_group(groupName='*') assert_true(isinstance(resp, list)) api2 = get_api2(self.user, 'solr') resp = api2.list_sentry_roles_by_group(groupName='*') assert_true(isinstance(resp, list))
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.'))
def decorator(*args, **kwargs): retries = 15 while retries > 0: try: return func(*args, **kwargs) except StructuredThriftTransportException, e: retries -= 1 if not is_ha_enabled() or retries == 0: raise PopupException(_( 'Failed to retry connecting to an available Sentry server.' ), detail=e) else: LOG.info( 'Could not connect to Sentry server %s, attempting to fetch next available client.' % args[0].client.host) time.sleep(1) args[0].client = get_cached_client(args[0].client.username, force_reset=True) except SentryException, e: raise e