diff options
author | jonmv <venstad@gmail.com> | 2022-08-19 09:45:50 +0200 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2022-08-19 09:45:50 +0200 |
commit | 822622900af9c04f710c29e5e98a33789ce00aed (patch) | |
tree | 213c74d21185eb71411b462d5ce119e703dfe3a3 /vespa-feed-client | |
parent | 5c4203a3a3cd6a1bad03c7b65999e3007d40aa57 (diff) |
Vary starting endpoint, to ensure pinging different ones when first is down
Diffstat (limited to 'vespa-feed-client')
-rw-r--r-- | vespa-feed-client/src/main/java/ai/vespa/feed/client/impl/ApacheCluster.java | 17 |
1 files changed, 11 insertions, 6 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 74fecf4c74a..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,6 +43,7 @@ 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")); @@ -55,14 +56,18 @@ class ApacheCluster implements Cluster { @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 { |