From 888a7aa833498fbf627f8ff7fd2e16f92b18d8d5 Mon Sep 17 00:00:00 2001 From: Farid Faoudi Date: Mon, 22 Feb 2021 00:37:52 +0100 Subject: [PATCH] 1704 Add SearchFailure field in ByQueryResponse --- .../core/query/ByQueryResponse.java | 143 +++++++++++++++++- 1 file changed, 137 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/springframework/data/elasticsearch/core/query/ByQueryResponse.java b/src/main/java/org/springframework/data/elasticsearch/core/query/ByQueryResponse.java index 232c4313c..42476b507 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/query/ByQueryResponse.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/query/ByQueryResponse.java @@ -21,6 +21,7 @@ import org.elasticsearch.action.bulk.BulkItemResponse; import org.elasticsearch.index.reindex.BulkByScrollResponse; +import org.elasticsearch.index.reindex.ScrollableHitSource; import org.springframework.lang.Nullable; /** @@ -43,10 +44,11 @@ public class ByQueryResponse { private final long searchRetries; @Nullable private final String reasonCancelled; private final List failures; + private final List searchFailures; private ByQueryResponse(long took, boolean timedOut, long total, long updated, long deleted, int batches, - long versionConflicts, long noops, long bulkRetries, long searchRetries, @Nullable String reasonCancelled, - List failures) { + long versionConflicts, long noops, long bulkRetries, long searchRetries, + @Nullable String reasonCancelled, List failures, List searchFailures) { this.took = took; this.timedOut = timedOut; this.total = total; @@ -59,7 +61,8 @@ private ByQueryResponse(long took, boolean timedOut, long total, long updated, l this.searchRetries = searchRetries; this.reasonCancelled = reasonCancelled; this.failures = failures; - } + this.searchFailures = searchFailures; + } /** * The number of milliseconds from start to end of the whole operation. @@ -148,7 +151,14 @@ public List getFailures() { return failures; } - /** + /** + * Failures during search phase + */ + public List getSearchFailures() { + return searchFailures; + } + + /** * Create a new {@link ByQueryResponseBuilder} to build {@link ByQueryResponse} * * @return a new {@link ByQueryResponseBuilder} to build {@link ByQueryResponse} @@ -163,7 +173,12 @@ public static ByQueryResponse of(BulkByScrollResponse bulkByScrollResponse) { .map(Failure::of) // .collect(Collectors.toList()); // - return ByQueryResponse.builder() // + final List searchFailures = bulkByScrollResponse.getSearchFailures() // + .stream() // + .map(SearchFailure::of) // + .collect(Collectors.toList());// + + return ByQueryResponse.builder() // .withTook(bulkByScrollResponse.getTook().getMillis()) // .withTimedOut(bulkByScrollResponse.isTimedOut()) // .withTotal(bulkByScrollResponse.getTotal()) // @@ -176,6 +191,7 @@ public static ByQueryResponse of(BulkByScrollResponse bulkByScrollResponse) { .withSearchRetries(bulkByScrollResponse.getSearchRetries()) // .withReasonCancelled(bulkByScrollResponse.getReasonCancelled()) // .withFailures(failures) // + .withSearchFailure(searchFailures) // .build(); // } @@ -331,6 +347,115 @@ public Failure build() { } } + public static class SearchFailure { + private final Throwable reason; + @Nullable private final Integer status; + @Nullable private final String index; + @Nullable private final Integer shardId; + @Nullable private final String nodeId; + + private SearchFailure(Throwable reason, @Nullable Integer status, @Nullable String index, + @Nullable Integer shardId, @Nullable String nodeId) { + this.reason = reason; + this.status = status; + this.index = index; + this.shardId = shardId; + this.nodeId = nodeId; + } + + public Throwable getReason() { + return reason; + } + + @Nullable + public Integer getStatus() { + return status; + } + + @Nullable + public String getIndex() { + return index; + } + + @Nullable + public Integer getShardId() { + return shardId; + } + + @Nullable + public String getNodeId() { + return nodeId; + } + + /** + * Create a new {@link SearchFailureBuilder} to build {@link SearchFailure} + * + * @return a new {@link SearchFailureBuilder} to build {@link SearchFailure} + */ + public static SearchFailureBuilder builder() { + return new SearchFailureBuilder(); + } + + /** + * Create a new {@link SearchFailure} from {@link ScrollableHitSource.SearchFailure} + * + * @param searchFailure {@link ScrollableHitSource.SearchFailure} to translate + * @return a new {@link SearchFailure} + */ + public static SearchFailure of(ScrollableHitSource.SearchFailure searchFailure) { + return builder() // + .withReason(searchFailure.getReason()) // + .withIndex(searchFailure.getIndex()) // + .withNodeId(searchFailure.getNodeId()) // + .withShardId(searchFailure.getShardId()) // + .withStatus(searchFailure.getStatus().getStatus()) // + .build(); // + } + + /** + * Builder for {@link SearchFailure} + */ + public static final class SearchFailureBuilder { + private Throwable reason; + @Nullable private Integer status; + @Nullable private String index; + @Nullable private Integer shardId; + @Nullable private String nodeId; + + private SearchFailureBuilder() {} + + public SearchFailureBuilder withReason(Throwable reason) { + this.reason = reason; + return this; + } + + public SearchFailureBuilder withStatus(Integer status) { + this.status = status; + return this; + } + + public SearchFailureBuilder withIndex(String index) { + this.index = index; + return this; + } + + public SearchFailureBuilder withShardId(Integer shardId) { + this.shardId = shardId; + return this; + } + + public SearchFailureBuilder withNodeId(String nodeId) { + this.nodeId = nodeId; + return this; + } + + public SearchFailure build() { + return new SearchFailure(reason, status, index, shardId, nodeId); + } + } + + } + public static final class ByQueryResponseBuilder { private long took; private boolean timedOut; @@ -344,6 +469,7 @@ public static final class ByQueryResponseBuilder { private long searchRetries; @Nullable private String reasonCancelled; private List failures = Collections.emptyList(); + private List searchFailures = Collections.emptyList(); private ByQueryResponseBuilder() {} @@ -407,9 +533,14 @@ public ByQueryResponseBuilder withFailures(List failures) { return this; } + public ByQueryResponseBuilder withSearchFailure(List searchFailures) { + this.searchFailures = searchFailures; + return this; + } + public ByQueryResponse build() { return new ByQueryResponse(took, timedOut, total, updated, deleted, batches, versionConflicts, noops, bulkRetries, - searchRetries, reasonCancelled, failures); + searchRetries, reasonCancelled, failures, searchFailures); } } }