From efb73ff4e7e9a3139e89ada65c77511706b740f5 Mon Sep 17 00:00:00 2001 From: Viktor Lofgren Date: Mon, 23 Oct 2023 11:53:18 +0200 Subject: [PATCH] (qs) Don't blow up if an index node isn't responsive --- .../java/nu/marginalia/index/client/IndexClient.java | 10 ++++++++-- .../index/client/model/results/SearchResultSet.java | 4 ++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/code/api/index-api/src/main/java/nu/marginalia/index/client/IndexClient.java b/code/api/index-api/src/main/java/nu/marginalia/index/client/IndexClient.java index 2b4c57f8..b500c8c6 100644 --- a/code/api/index-api/src/main/java/nu/marginalia/index/client/IndexClient.java +++ b/code/api/index-api/src/main/java/nu/marginalia/index/client/IndexClient.java @@ -15,6 +15,8 @@ import nu.marginalia.mq.MessageQueueFactory; import nu.marginalia.mq.outbox.MqOutbox; import nu.marginalia.service.descriptor.ServiceDescriptors; import nu.marginalia.service.id.ServiceId; + +import java.util.ArrayList; import java.util.List; import javax.annotation.CheckReturnValue; @@ -54,8 +56,12 @@ public class IndexClient extends AbstractDynamicClient { @CheckReturnValue public SearchResultSet query(Context ctx, List nodes, SearchSpecification specs) { return Observable.fromIterable(nodes) - .subscribeOn(Schedulers.io()) - .concatMap(node -> this.postGet(ctx, node,"/search/", specs, SearchResultSet.class)) + .concatMap(node -> this + .postGet(ctx, node,"/search/", specs, SearchResultSet.class) + .onErrorReturn(t -> new SearchResultSet()), + nodes.size(), + Schedulers.io() + ) .reduce(SearchResultSet::combine) .blockingGet(); } diff --git a/code/api/index-api/src/main/java/nu/marginalia/index/client/model/results/SearchResultSet.java b/code/api/index-api/src/main/java/nu/marginalia/index/client/model/results/SearchResultSet.java index 296a2df7..f4159f3a 100644 --- a/code/api/index-api/src/main/java/nu/marginalia/index/client/model/results/SearchResultSet.java +++ b/code/api/index-api/src/main/java/nu/marginalia/index/client/model/results/SearchResultSet.java @@ -10,6 +10,10 @@ import java.util.List; @AllArgsConstructor @Getter @ToString public class SearchResultSet { + public SearchResultSet() { + results = new ArrayList<>(); + } + public List results; public int size() { return results.size();