|
|
@@ -14,7 +14,6 @@ import org.elasticsearch.transport.Transport;
|
|
|
|
|
|
import java.util.List;
|
|
|
import java.util.Objects;
|
|
|
-import java.util.function.Function;
|
|
|
|
|
|
/**
|
|
|
* Base class for all individual search phases like collecting distributed frequencies, fetching documents, querying shards.
|
|
|
@@ -35,26 +34,13 @@ abstract class SearchPhase {
|
|
|
return name;
|
|
|
}
|
|
|
|
|
|
- protected String missingShardsErrorMessage(StringBuilder missingShards) {
|
|
|
- return makeMissingShardsError(missingShards);
|
|
|
- }
|
|
|
-
|
|
|
- protected static String makeMissingShardsError(StringBuilder missingShards) {
|
|
|
+ private static String makeMissingShardsError(StringBuilder missingShards) {
|
|
|
return "Search rejected due to missing shards ["
|
|
|
+ missingShards
|
|
|
+ "]. Consider using `allow_partial_search_results` setting to bypass this error.";
|
|
|
}
|
|
|
|
|
|
- protected void doCheckNoMissingShards(String phaseName, SearchRequest request, List<SearchShardIterator> shardsIts) {
|
|
|
- doCheckNoMissingShards(phaseName, request, shardsIts, this::missingShardsErrorMessage);
|
|
|
- }
|
|
|
-
|
|
|
- protected static void doCheckNoMissingShards(
|
|
|
- String phaseName,
|
|
|
- SearchRequest request,
|
|
|
- List<SearchShardIterator> shardsIts,
|
|
|
- Function<StringBuilder, String> makeErrorMessage
|
|
|
- ) {
|
|
|
+ protected static void doCheckNoMissingShards(String phaseName, SearchRequest request, List<SearchShardIterator> shardsIts) {
|
|
|
assert request.allowPartialSearchResults() != null : "SearchRequest missing setting for allowPartialSearchResults";
|
|
|
if (request.allowPartialSearchResults() == false) {
|
|
|
final StringBuilder missingShards = new StringBuilder();
|
|
|
@@ -70,7 +56,7 @@ abstract class SearchPhase {
|
|
|
}
|
|
|
if (missingShards.isEmpty() == false) {
|
|
|
// Status red - shard is missing all copies and would produce partial results for an index search
|
|
|
- final String msg = makeErrorMessage.apply(missingShards);
|
|
|
+ final String msg = makeMissingShardsError(missingShards);
|
|
|
throw new SearchPhaseExecutionException(phaseName, msg, null, ShardSearchFailure.EMPTY_ARRAY);
|
|
|
}
|
|
|
}
|