Skip to content

Commit 1c549b7

Browse files
author
Farid Faoudi
authored
Add SearchFailure field in ByQueryResponse.
Original Pull Request spring-projects#1705 Closes spring-projects#1704
1 parent 863ac2f commit 1c549b7

File tree

1 file changed

+137
-6
lines changed

1 file changed

+137
-6
lines changed

Diff for: src/main/java/org/springframework/data/elasticsearch/core/query/ByQueryResponse.java

+137-6
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import org.elasticsearch.action.bulk.BulkItemResponse;
2323
import org.elasticsearch.index.reindex.BulkByScrollResponse;
24+
import org.elasticsearch.index.reindex.ScrollableHitSource;
2425
import org.springframework.lang.Nullable;
2526

2627
/**
@@ -43,10 +44,11 @@ public class ByQueryResponse {
4344
private final long searchRetries;
4445
@Nullable private final String reasonCancelled;
4546
private final List<Failure> failures;
47+
private final List<SearchFailure> searchFailures;
4648

4749
private ByQueryResponse(long took, boolean timedOut, long total, long updated, long deleted, int batches,
48-
long versionConflicts, long noops, long bulkRetries, long searchRetries, @Nullable String reasonCancelled,
49-
List<Failure> failures) {
50+
long versionConflicts, long noops, long bulkRetries, long searchRetries,
51+
@Nullable String reasonCancelled, List<Failure> failures, List<SearchFailure> searchFailures) {
5052
this.took = took;
5153
this.timedOut = timedOut;
5254
this.total = total;
@@ -59,7 +61,8 @@ private ByQueryResponse(long took, boolean timedOut, long total, long updated, l
5961
this.searchRetries = searchRetries;
6062
this.reasonCancelled = reasonCancelled;
6163
this.failures = failures;
62-
}
64+
this.searchFailures = searchFailures;
65+
}
6366

6467
/**
6568
* The number of milliseconds from start to end of the whole operation.
@@ -148,7 +151,14 @@ public List<Failure> getFailures() {
148151
return failures;
149152
}
150153

151-
/**
154+
/**
155+
* Failures during search phase
156+
*/
157+
public List<SearchFailure> getSearchFailures() {
158+
return searchFailures;
159+
}
160+
161+
/**
152162
* Create a new {@link ByQueryResponseBuilder} to build {@link ByQueryResponse}
153163
*
154164
* @return a new {@link ByQueryResponseBuilder} to build {@link ByQueryResponse}
@@ -163,7 +173,12 @@ public static ByQueryResponse of(BulkByScrollResponse bulkByScrollResponse) {
163173
.map(Failure::of) //
164174
.collect(Collectors.toList()); //
165175

166-
return ByQueryResponse.builder() //
176+
final List<SearchFailure> searchFailures = bulkByScrollResponse.getSearchFailures() //
177+
.stream() //
178+
.map(SearchFailure::of) //
179+
.collect(Collectors.toList());//
180+
181+
return ByQueryResponse.builder() //
167182
.withTook(bulkByScrollResponse.getTook().getMillis()) //
168183
.withTimedOut(bulkByScrollResponse.isTimedOut()) //
169184
.withTotal(bulkByScrollResponse.getTotal()) //
@@ -176,6 +191,7 @@ public static ByQueryResponse of(BulkByScrollResponse bulkByScrollResponse) {
176191
.withSearchRetries(bulkByScrollResponse.getSearchRetries()) //
177192
.withReasonCancelled(bulkByScrollResponse.getReasonCancelled()) //
178193
.withFailures(failures) //
194+
.withSearchFailure(searchFailures) //
179195
.build(); //
180196
}
181197

@@ -331,6 +347,115 @@ public Failure build() {
331347
}
332348
}
333349

350+
public static class SearchFailure {
351+
private final Throwable reason;
352+
@Nullable private final Integer status;
353+
@Nullable private final String index;
354+
@Nullable private final Integer shardId;
355+
@Nullable private final String nodeId;
356+
357+
private SearchFailure(Throwable reason, @Nullable Integer status, @Nullable String index,
358+
@Nullable Integer shardId, @Nullable String nodeId) {
359+
this.reason = reason;
360+
this.status = status;
361+
this.index = index;
362+
this.shardId = shardId;
363+
this.nodeId = nodeId;
364+
}
365+
366+
public Throwable getReason() {
367+
return reason;
368+
}
369+
370+
@Nullable
371+
public Integer getStatus() {
372+
return status;
373+
}
374+
375+
@Nullable
376+
public String getIndex() {
377+
return index;
378+
}
379+
380+
@Nullable
381+
public Integer getShardId() {
382+
return shardId;
383+
}
384+
385+
@Nullable
386+
public String getNodeId() {
387+
return nodeId;
388+
}
389+
390+
/**
391+
* Create a new {@link SearchFailureBuilder} to build {@link SearchFailure}
392+
*
393+
* @return a new {@link SearchFailureBuilder} to build {@link SearchFailure}
394+
*/
395+
public static SearchFailureBuilder builder() {
396+
return new SearchFailureBuilder();
397+
}
398+
399+
/**
400+
* Create a new {@link SearchFailure} from {@link ScrollableHitSource.SearchFailure}
401+
*
402+
* @param searchFailure {@link ScrollableHitSource.SearchFailure} to translate
403+
* @return a new {@link SearchFailure}
404+
*/
405+
public static SearchFailure of(ScrollableHitSource.SearchFailure searchFailure) {
406+
return builder() //
407+
.withReason(searchFailure.getReason()) //
408+
.withIndex(searchFailure.getIndex()) //
409+
.withNodeId(searchFailure.getNodeId()) //
410+
.withShardId(searchFailure.getShardId()) //
411+
.withStatus(searchFailure.getStatus().getStatus()) //
412+
.build(); //
413+
}
414+
415+
/**
416+
* Builder for {@link SearchFailure}
417+
*/
418+
public static final class SearchFailureBuilder {
419+
private Throwable reason;
420+
@Nullable private Integer status;
421+
@Nullable private String index;
422+
@Nullable private Integer shardId;
423+
@Nullable private String nodeId;
424+
425+
private SearchFailureBuilder() {}
426+
427+
public SearchFailureBuilder withReason(Throwable reason) {
428+
this.reason = reason;
429+
return this;
430+
}
431+
432+
public SearchFailureBuilder withStatus(Integer status) {
433+
this.status = status;
434+
return this;
435+
}
436+
437+
public SearchFailureBuilder withIndex(String index) {
438+
this.index = index;
439+
return this;
440+
}
441+
442+
public SearchFailureBuilder withShardId(Integer shardId) {
443+
this.shardId = shardId;
444+
return this;
445+
}
446+
447+
public SearchFailureBuilder withNodeId(String nodeId) {
448+
this.nodeId = nodeId;
449+
return this;
450+
}
451+
452+
public SearchFailure build() {
453+
return new SearchFailure(reason, status, index, shardId, nodeId);
454+
}
455+
}
456+
457+
}
458+
334459
public static final class ByQueryResponseBuilder {
335460
private long took;
336461
private boolean timedOut;
@@ -344,6 +469,7 @@ public static final class ByQueryResponseBuilder {
344469
private long searchRetries;
345470
@Nullable private String reasonCancelled;
346471
private List<Failure> failures = Collections.emptyList();
472+
private List<SearchFailure> searchFailures = Collections.emptyList();
347473

348474
private ByQueryResponseBuilder() {}
349475

@@ -407,9 +533,14 @@ public ByQueryResponseBuilder withFailures(List<Failure> failures) {
407533
return this;
408534
}
409535

536+
public ByQueryResponseBuilder withSearchFailure(List<SearchFailure> searchFailures) {
537+
this.searchFailures = searchFailures;
538+
return this;
539+
}
540+
410541
public ByQueryResponse build() {
411542
return new ByQueryResponse(took, timedOut, total, updated, deleted, batches, versionConflicts, noops, bulkRetries,
412-
searchRetries, reasonCancelled, failures);
543+
searchRetries, reasonCancelled, failures, searchFailures);
413544
}
414545
}
415546
}

0 commit comments

Comments
 (0)