@Override public void sendRequest(PermitRequest request, Callback<Response<PermitAllocation>> callback) { log.info("Sending request to " + getCurrentServerPrefix()); super.sendRequest(request, callback); }
/** * @param broker {@link SharedResourcesBroker} used to create {@link RestClient}s. * @param connectionPrefixes List of uri prefixes of available servers. * @throws NotConfiguredException */ public RedirectAwareRestClientRequestSender(SharedResourcesBroker<?> broker, List<String> connectionPrefixes) throws NotConfiguredException { this.broker = broker; this.connectionPrefixes = connectionPrefixes; updateRestClient(getNextConnectionPrefix(), "service start"); }
RedirectAwareRestClientRequestSender.this.updateRestClient( SharedRestClientFactory.resolveUriPrefix(new URI(newUri)), "301 redirect"); this.exponentialBackoff.awaitNextRetry(); sendRequest(this.originalRequest, this); } else if (error instanceof RemoteInvocationException && shouldCatchExceptionAndSwitchUrl((RemoteInvocationException) error)) { this.retries++; if (this.retries > RedirectAwareRestClientRequestSender.this.connectionPrefixes.size()) { this.underlying.onError(new NonRetriableException("Failed to connect to all available connection prefixes.")); updateRestClient(getNextConnectionPrefix(), "Failed to communicate with " + getCurrentServerPrefix()); this.exponentialBackoff.awaitNextRetry(); sendRequest(this.originalRequest, this); } else { this.underlying.onError(error);
RedirectAwareRestClientRequestSender requestSender = new RedirectAwareRestClientRequestSender(broker, Lists.newArrayList(server2500.getServer().getURIPrefix(), server2501.getServer().getURIPrefix())); RestliServiceBasedLimiter limiter = RestliServiceBasedLimiter.builder() requestSender.updateRestClient(server2500.getServer().getURIPrefix(), "test"); Assert.assertEquals(parsePortOfCurrentServerPrefix(requestSender), 2500); Assert.assertNotNull(limiter.acquirePermits(20));
@Override public SharedResourceFactoryResponse<RequestSender> createResource( SharedResourcesBroker<S> broker, ScopedConfigView<S, SharedRestClientKey> config) throws NotConfiguredException { try { List<String> connectionPrefixes = SharedRestClientFactory.parseConnectionPrefixes(config.getConfig(), config.getKey()); return new ResourceInstance<>( new RedirectAwareRestClientRequestSender(broker, connectionPrefixes)); } catch (URISyntaxException use) { throw new RuntimeException(use); } }
.requestSender(new RedirectAwareRestClientRequestSender(broker, Lists.newArrayList(server.getURIPrefix()))) .resourceLimited(res1key.getResourceLimitedPath()).serviceIdentifier("service").build();
private int parsePortOfCurrentServerPrefix(RedirectAwareRestClientRequestSender requestSender) throws URISyntaxException{ return new URI(requestSender.getCurrentServerPrefix()).getPort(); }