21
21
22
22
import org .elasticsearch .action .bulk .BulkItemResponse ;
23
23
import org .elasticsearch .index .reindex .BulkByScrollResponse ;
24
+ import org .elasticsearch .index .reindex .ScrollableHitSource ;
24
25
import org .springframework .lang .Nullable ;
25
26
26
27
/**
@@ -43,10 +44,11 @@ public class ByQueryResponse {
43
44
private final long searchRetries ;
44
45
@ Nullable private final String reasonCancelled ;
45
46
private final List <Failure > failures ;
47
+ private final List <SearchFailure > searchFailures ;
46
48
47
49
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 ) {
50
52
this .took = took ;
51
53
this .timedOut = timedOut ;
52
54
this .total = total ;
@@ -59,7 +61,8 @@ private ByQueryResponse(long took, boolean timedOut, long total, long updated, l
59
61
this .searchRetries = searchRetries ;
60
62
this .reasonCancelled = reasonCancelled ;
61
63
this .failures = failures ;
62
- }
64
+ this .searchFailures = searchFailures ;
65
+ }
63
66
64
67
/**
65
68
* The number of milliseconds from start to end of the whole operation.
@@ -148,7 +151,14 @@ public List<Failure> getFailures() {
148
151
return failures ;
149
152
}
150
153
151
- /**
154
+ /**
155
+ * Failures during search phase
156
+ */
157
+ public List <SearchFailure > getSearchFailures () {
158
+ return searchFailures ;
159
+ }
160
+
161
+ /**
152
162
* Create a new {@link ByQueryResponseBuilder} to build {@link ByQueryResponse}
153
163
*
154
164
* @return a new {@link ByQueryResponseBuilder} to build {@link ByQueryResponse}
@@ -163,7 +173,12 @@ public static ByQueryResponse of(BulkByScrollResponse bulkByScrollResponse) {
163
173
.map (Failure ::of ) //
164
174
.collect (Collectors .toList ()); //
165
175
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 () //
167
182
.withTook (bulkByScrollResponse .getTook ().getMillis ()) //
168
183
.withTimedOut (bulkByScrollResponse .isTimedOut ()) //
169
184
.withTotal (bulkByScrollResponse .getTotal ()) //
@@ -176,6 +191,7 @@ public static ByQueryResponse of(BulkByScrollResponse bulkByScrollResponse) {
176
191
.withSearchRetries (bulkByScrollResponse .getSearchRetries ()) //
177
192
.withReasonCancelled (bulkByScrollResponse .getReasonCancelled ()) //
178
193
.withFailures (failures ) //
194
+ .withSearchFailure (searchFailures ) //
179
195
.build (); //
180
196
}
181
197
@@ -331,6 +347,115 @@ public Failure build() {
331
347
}
332
348
}
333
349
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
+
334
459
public static final class ByQueryResponseBuilder {
335
460
private long took ;
336
461
private boolean timedOut ;
@@ -344,6 +469,7 @@ public static final class ByQueryResponseBuilder {
344
469
private long searchRetries ;
345
470
@ Nullable private String reasonCancelled ;
346
471
private List <Failure > failures = Collections .emptyList ();
472
+ private List <SearchFailure > searchFailures = Collections .emptyList ();
347
473
348
474
private ByQueryResponseBuilder () {}
349
475
@@ -407,9 +533,14 @@ public ByQueryResponseBuilder withFailures(List<Failure> failures) {
407
533
return this ;
408
534
}
409
535
536
+ public ByQueryResponseBuilder withSearchFailure (List <SearchFailure > searchFailures ) {
537
+ this .searchFailures = searchFailures ;
538
+ return this ;
539
+ }
540
+
410
541
public ByQueryResponse build () {
411
542
return new ByQueryResponse (took , timedOut , total , updated , deleted , batches , versionConflicts , noops , bulkRetries ,
412
- searchRetries , reasonCancelled , failures );
543
+ searchRetries , reasonCancelled , failures , searchFailures );
413
544
}
414
545
}
415
546
}
0 commit comments