aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <jonmv@users.noreply.github.com>2022-08-23 10:19:29 +0200
committerGitHub <noreply@github.com>2022-08-23 10:19:29 +0200
commit7e290cd7574f69071490dbfb78da9e2773a863e7 (patch)
treec89fa3c5da39bdf10e0575a07ec9afe809080d98
parent8e096204bddca2292990aa0497f87dd2f44c181c (diff)
parent59d6f9659838e161b869d1b92779df2a295db618 (diff)
Merge pull request #23713 from vespa-engine/jonmv/spread-feed-more
Jonmv/spread feed more
-rw-r--r--vespa-feed-client/src/main/java/ai/vespa/feed/client/impl/ApacheCluster.java21
1 files changed, 13 insertions, 8 deletions
diff --git a/vespa-feed-client/src/main/java/ai/vespa/feed/client/impl/ApacheCluster.java b/vespa-feed-client/src/main/java/ai/vespa/feed/client/impl/ApacheCluster.java
index decb5021f8f..6714f2bd590 100644
--- a/vespa-feed-client/src/main/java/ai/vespa/feed/client/impl/ApacheCluster.java
+++ b/vespa-feed-client/src/main/java/ai/vespa/feed/client/impl/ApacheCluster.java
@@ -43,26 +43,31 @@ class ApacheCluster implements Cluster {
private final List<BasicHeader> defaultHeaders = Arrays.asList(new BasicHeader("User-Agent", String.format("vespa-feed-client/%s", Vespa.VERSION)),
new BasicHeader("Vespa-Client-Version", Vespa.VERSION));
private final RequestConfig requestConfig;
+ private int someNumber = 0;
private final ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(t -> new Thread(t, "request-timeout-thread"));
ApacheCluster(FeedClientBuilderImpl builder) throws IOException {
- for (URI endpoint : builder.endpoints)
- for (int i = 0; i < builder.connectionsPerEndpoint; i++)
+ for (int i = 0; i < builder.connectionsPerEndpoint; i++)
+ for (URI endpoint : builder.endpoints)
endpoints.add(new Endpoint(createHttpClient(builder), endpoint));
this.requestConfig = createRequestConfig(builder);
}
@Override
public void dispatch(HttpRequest wrapped, CompletableFuture<HttpResponse> vessel) {
- int index = 0;
+ Endpoint leastBusy = endpoints.get(0);
int min = Integer.MAX_VALUE;
- for (int i = 0; i < endpoints.size(); i++)
- if (endpoints.get(i).inflight.get() < min) {
- index = i;
- min = endpoints.get(i).inflight.get();
+ int start = ++someNumber % endpoints.size();
+ for (int i = 0; i < endpoints.size(); i++) {
+ Endpoint endpoint = endpoints.get((i + start) % endpoints.size());
+ int inflight = endpoint.inflight.get();
+ if (inflight < min) {
+ leastBusy = endpoint;
+ min = inflight;
}
- Endpoint endpoint = endpoints.get(index);
+ }
+ Endpoint endpoint = leastBusy;
endpoint.inflight.incrementAndGet();
try {