aboutsummaryrefslogtreecommitdiffstats
path: root/vespa-feed-client
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-08-19 09:45:50 +0200
committerjonmv <venstad@gmail.com>2022-08-19 09:45:50 +0200
commit822622900af9c04f710c29e5e98a33789ce00aed (patch)
tree213c74d21185eb71411b462d5ce119e703dfe3a3 /vespa-feed-client
parent5c4203a3a3cd6a1bad03c7b65999e3007d40aa57 (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.java17
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 {