diff options
author | Jon Marius Venstad <jonmv@users.noreply.github.com> | 2022-08-23 10:19:29 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-23 10:19:29 +0200 |
commit | 7e290cd7574f69071490dbfb78da9e2773a863e7 (patch) | |
tree | c89fa3c5da39bdf10e0575a07ec9afe809080d98 | |
parent | 8e096204bddca2292990aa0497f87dd2f44c181c (diff) | |
parent | 59d6f9659838e161b869d1b92779df2a295db618 (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.java | 21 |
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 { |