Java 类org.elasticsearch.action.search.ShardSearchFailure 实例源码
项目:elasticsearch_my
文件:ClientScrollableHitSource.java
private Response wrap(SearchResponse response) {
List<SearchFailure> failures;
if (response.getShardFailures() == null) {
failures = emptyList();
} else {
failures = new ArrayList<>(response.getShardFailures().length);
for (ShardSearchFailure failure: response.getShardFailures()) {
String nodeId = failure.shard() == null ? null : failure.shard().getNodeId();
failures.add(new SearchFailure(failure.getCause(), failure.index(), failure.shardId(), nodeId));
}
}
List<Hit> hits;
if (response.getHits().getHits() == null || response.getHits().getHits().length == 0) {
hits = emptyList();
} else {
hits = new ArrayList<>(response.getHits().getHits().length);
for (SearchHit hit: response.getHits().getHits()) {
hits.add(new ClientHit(hit));
}
hits = unmodifiableList(hits);
}
return new Response(response.isTimedOut(), failures, response.getHits().getTotalHits(),
hits, response.getScrollId());
}
项目:elasticsearch_my
文件:IndexLookupIT.java
private void checkExceptions(Script script) {
try {
SearchResponse sr = client().prepareSearch("test").setQuery(QueryBuilders.matchAllQuery()).addScriptField("tvtest", script)
.execute().actionGet();
assertThat(sr.getHits().getHits().length, equalTo(0));
ShardSearchFailure[] shardFails = sr.getShardFailures();
for (ShardSearchFailure fail : shardFails) {
assertThat(fail.reason().indexOf("Cannot iterate twice! If you want to iterate more that once, add _CACHE explicitly."),
Matchers.greaterThan(-1));
}
} catch (SearchPhaseExecutionException ex) {
assertThat(
"got " + ex.toString(),
ex.toString().indexOf("Cannot iterate twice! If you want to iterate more that once, add _CACHE explicitly."),
Matchers.greaterThan(-1));
}
}
项目:elasticsearch_my
文件:ExceptionSerializationTests.java
public void testSearchPhaseExecutionException() throws IOException {
ShardSearchFailure[] empty = new ShardSearchFailure[0];
SearchPhaseExecutionException ex = serialize(new SearchPhaseExecutionException("boom", "baam", new NullPointerException(), empty));
assertEquals("boom", ex.getPhaseName());
assertEquals("baam", ex.getMessage());
assertTrue(ex.getCause() instanceof NullPointerException);
assertEquals(empty.length, ex.shardFailures().length);
ShardSearchFailure[] one = new ShardSearchFailure[]{
new ShardSearchFailure(new IllegalArgumentException("nono!"))
};
ex = serialize(new SearchPhaseExecutionException("boom", "baam", new NullPointerException(), one));
assertEquals("boom", ex.getPhaseName());
assertEquals("baam", ex.getMessage());
assertTrue(ex.getCause() instanceof NullPointerException);
assertEquals(one.length, ex.shardFailures().length);
assertTrue(ex.shardFailures()[0].getCause() instanceof IllegalArgumentException);
}
项目:elasticsearch-learning-to-rank
文件:TransportFeatureStoreAction.java
/**
* Perform a test search request to validate the element prior to storing it.
*
* @param validation validation info
* @param element the element stored
* @param task the parent task
* @param listener the action listener to write to
* @param onSuccess action ro run when the validation is successfull
*/
private void validate(FeatureValidation validation,
StorableElement element,
Task task,
ActionListener<FeatureStoreResponse> listener,
Runnable onSuccess) {
ValidatingLtrQueryBuilder ltrBuilder = new ValidatingLtrQueryBuilder(element,
validation, factory);
SearchRequestBuilder builder = SearchAction.INSTANCE.newRequestBuilder(client);
builder.setIndices(validation.getIndex());
builder.setQuery(ltrBuilder);
builder.setFrom(0);
builder.setSize(20);
// Bail out early and don't score the whole index.
builder.setTerminateAfter(1000);
builder.request().setParentTask(clusterService.localNode().getId(), task.getId());
builder.execute(wrap((r) -> {
if (r.getFailedShards() > 0) {
ShardSearchFailure failure = r.getShardFailures()[0];
throw new IllegalArgumentException("Validating the element caused " + r.getFailedShards() +
" shard failures, see root cause: " + failure.reason(), failure.getCause());
}
onSuccess.run();
},
(e) -> listener.onFailure(new IllegalArgumentException("Cannot store element, validation failed.", e))));
}
项目:elasticsearch-taste
文件:DefaultRequestHandler.java
protected void validateRespose(final SearchResponse response) {
final int totalShards = response.getTotalShards();
final int successfulShards = response.getSuccessfulShards();
if (totalShards != successfulShards) {
throw new MissingShardsException(totalShards - successfulShards
+ " shards are failed.");
}
final ShardSearchFailure[] failures = response.getShardFailures();
if (failures.length > 0) {
final StringBuilder buf = new StringBuilder();
for (final ShardOperationFailedException failure : failures) {
buf.append('\n').append(failure.toString());
}
throw new OperationFailedException("Search Operation Failed: "
+ buf.toString());
}
}
项目:elasticsearch_my
文件:TransportNoopSearchAction.java
@Override
protected void doExecute(SearchRequest request, ActionListener<SearchResponse> listener) {
listener.onResponse(new SearchResponse(new InternalSearchResponse(
new SearchHits(
new SearchHit[0], 0L, 0.0f),
new InternalAggregations(Collections.emptyList()),
new Suggest(Collections.emptyList()),
new SearchProfileShardResults(Collections.emptyMap()), false, false, 1), "", 1, 1, 0, new ShardSearchFailure[0]));
}
项目:elasticsearch_my
文件:ElasticsearchAssertions.java
public static String formatShardStatus(SearchResponse response) {
String msg = " Total shards: " + response.getTotalShards() + " Successful shards: " + response.getSuccessfulShards() + " & "
+ response.getFailedShards() + " shard failures:";
for (ShardSearchFailure failure : response.getShardFailures()) {
msg += "\n " + failure.toString();
}
return msg;
}
项目:elasticsearch_my
文件:SnapshotsService.java
/**
* Finalizes the shard in repository and then removes it from cluster state
* <p>
* This is non-blocking method that runs on a thread from SNAPSHOT thread pool
*
* @param entry snapshot
* @param failure failure reason or null if snapshot was successful
*/
private void endSnapshot(final SnapshotsInProgress.Entry entry, final String failure) {
threadPool.executor(ThreadPool.Names.SNAPSHOT).execute(new Runnable() {
@Override
public void run() {
final Snapshot snapshot = entry.snapshot();
try {
final Repository repository = repositoriesService.repository(snapshot.getRepository());
logger.trace("[{}] finalizing snapshot in repository, state: [{}], failure[{}]", snapshot, entry.state(), failure);
ArrayList<ShardSearchFailure> failures = new ArrayList<>();
ArrayList<SnapshotShardFailure> shardFailures = new ArrayList<>();
for (ObjectObjectCursor<ShardId, ShardSnapshotStatus> shardStatus : entry.shards()) {
ShardId shardId = shardStatus.key;
ShardSnapshotStatus status = shardStatus.value;
if (status.state().failed()) {
failures.add(new ShardSearchFailure(status.reason(), new SearchShardTarget(status.nodeId(), shardId)));
shardFailures.add(new SnapshotShardFailure(status.nodeId(), shardId, status.reason()));
}
}
SnapshotInfo snapshotInfo = repository.finalizeSnapshot(
snapshot.getSnapshotId(),
entry.indices(),
entry.startTime(),
failure,
entry.shards().size(),
Collections.unmodifiableList(shardFailures),
entry.getRepositoryStateId());
removeSnapshotFromClusterState(snapshot, snapshotInfo, null);
} catch (Exception e) {
logger.warn((Supplier<?>) () -> new ParameterizedMessage("[{}] failed to finalize snapshot", snapshot), e);
removeSnapshotFromClusterState(snapshot, null, e);
}
}
});
}
项目:elasticsearch_my
文件:StatsIT.java
private void assertShardExecutionState(SearchResponse response, int expectedFailures) throws Exception {
ShardSearchFailure[] failures = response.getShardFailures();
if (failures.length != expectedFailures) {
for (ShardSearchFailure failure : failures) {
logger.error((Supplier<?>) () -> new ParameterizedMessage("Shard Failure: {}", failure), failure.getCause());
}
fail("Unexpected shard failures!");
}
assertThat("Not all shards are initialized", response.getSuccessfulShards(), equalTo(response.getTotalShards()));
}
项目:elasticsearch_my
文件:FieldSortIT.java
public void testIgnoreUnmapped() throws Exception {
createIndex("test");
client().prepareIndex("test", "type1", "1").setSource(jsonBuilder().startObject()
.field("id", "1")
.field("i_value", -1)
.field("d_value", -1.1)
.endObject()).execute().actionGet();
logger.info("--> sort with an unmapped field, verify it fails");
try {
SearchResponse result = client().prepareSearch()
.setQuery(matchAllQuery())
.addSort(SortBuilders.fieldSort("kkk"))
.execute().actionGet();
assertThat("Expected exception but returned with", result, nullValue());
} catch (SearchPhaseExecutionException e) {
//we check that it's a parse failure rather than a different shard failure
for (ShardSearchFailure shardSearchFailure : e.shardFailures()) {
assertThat(shardSearchFailure.toString(), containsString("[No mapping found for [kkk] in order to sort on]"));
}
}
SearchResponse searchResponse = client().prepareSearch()
.setQuery(matchAllQuery())
.addSort(SortBuilders.fieldSort("kkk").unmappedType("keyword"))
.execute().actionGet();
assertNoFailures(searchResponse);
}
项目:elasticsearch_my
文件:BytesRestResponseTests.java
public void testConvert() throws IOException {
RestRequest request = new FakeRestRequest();
RestChannel channel = new DetailedExceptionRestChannel(request);
ShardSearchFailure failure = new ShardSearchFailure(new ParsingException(1, 2, "foobar", null),
new SearchShardTarget("node_1", new Index("foo", "_na_"), 1));
ShardSearchFailure failure1 = new ShardSearchFailure(new ParsingException(1, 2, "foobar", null),
new SearchShardTarget("node_1", new Index("foo", "_na_"), 2));
SearchPhaseExecutionException ex = new SearchPhaseExecutionException("search", "all shards failed", new ShardSearchFailure[] {failure, failure1});
BytesRestResponse response = new BytesRestResponse(channel, new RemoteTransportException("foo", ex));
String text = response.content().utf8ToString();
String expected = "{\"error\":{\"root_cause\":[{\"type\":\"parsing_exception\",\"reason\":\"foobar\",\"line\":1,\"col\":2}],\"type\":\"search_phase_execution_exception\",\"reason\":\"all shards failed\",\"phase\":\"search\",\"grouped\":true,\"failed_shards\":[{\"shard\":1,\"index\":\"foo\",\"node\":\"node_1\",\"reason\":{\"type\":\"parsing_exception\",\"reason\":\"foobar\",\"line\":1,\"col\":2}}]},\"status\":400}";
assertEquals(expected.trim(), text.trim());
String stackTrace = ExceptionsHelper.stackTrace(ex);
assertTrue(stackTrace.contains("Caused by: ParsingException[foobar]"));
}
项目:Elasticsearch
文件:SnapshotsService.java
/**
* Finalizes the shard in repository and then removes it from cluster state
* <p>
* This is non-blocking method that runs on a thread from SNAPSHOT thread pool
*
* @param entry snapshot
* @param failure failure reason or null if snapshot was successful
*/
private void endSnapshot(final SnapshotsInProgress.Entry entry, final String failure) {
threadPool.executor(ThreadPool.Names.SNAPSHOT).execute(new Runnable() {
@Override
public void run() {
SnapshotId snapshotId = entry.snapshotId();
try {
final Repository repository = repositoriesService.repository(snapshotId.getRepository());
logger.trace("[{}] finalizing snapshot in repository, state: [{}], failure[{}]", snapshotId, entry.state(), failure);
ArrayList<ShardSearchFailure> failures = new ArrayList<>();
ArrayList<SnapshotShardFailure> shardFailures = new ArrayList<>();
for (Map.Entry<ShardId, ShardSnapshotStatus> shardStatus : entry.shards().entrySet()) {
ShardId shardId = shardStatus.getKey();
ShardSnapshotStatus status = shardStatus.getValue();
if (status.state().failed()) {
failures.add(new ShardSearchFailure(status.reason(), new SearchShardTarget(status.nodeId(), shardId.getIndex(), shardId.id())));
shardFailures.add(new SnapshotShardFailure(status.nodeId(), shardId.getIndex(), shardId.id(), status.reason()));
}
}
Snapshot snapshot = repository.finalizeSnapshot(snapshotId, entry.indices(), entry.startTime(), failure, entry.shards().size(), Collections.unmodifiableList(shardFailures));
removeSnapshotFromClusterState(snapshotId, new SnapshotInfo(snapshot), null);
} catch (Throwable t) {
logger.warn("[{}] failed to finalize snapshot", t, snapshotId);
removeSnapshotFromClusterState(snapshotId, null, t);
}
}
});
}
项目:sakai
文件:ElasticSearchService.java
@Override
public SearchResponse search(String searchTerms, List<String> references, List<String> siteIds, int start, int end, Map<String,String> additionalSearchInfromation) {
return new SearchResponse(
new InternalSearchResponse(new InternalSearchHits(new InternalSearchHit[0], 0, 0.0f), new InternalFacets(Collections.EMPTY_LIST), new InternalAggregations(Collections.EMPTY_LIST), new Suggest(), false, false),
"no-op",
1,
1,
1,
new ShardSearchFailure[0]
);
}
项目:metron
文件:ElasticsearchRequestSubmitter.java
/**
* Handle individual shard failures that can occur even when the response is OK. These
* can indicate misconfiguration of the search indices.
* @param request The search request.
* @param response The search response.
*/
private void handleShardFailures(
org.elasticsearch.action.search.SearchRequest request,
org.elasticsearch.action.search.SearchResponse response) {
/*
* shard failures are only logged. the search itself is not failed. this approach
* assumes that a user is interested in partial search results, even if the
* entire search result set cannot be produced.
*
* for example, assume the user adds an additional sensor and the telemetry
* is indexed into a new search index. if that search index is misconfigured,
* it can result in partial shard failures. rather than failing the entire search,
* we log the error and allow the results to be returned from shards that
* are correctly configured.
*/
int errors = ArrayUtils.getLength(response.getShardFailures());
LOG.error("Search resulted in {}/{} shards failing; errors={}, search={}",
response.getFailedShards(),
response.getTotalShards(),
errors,
ElasticsearchUtils.toJSON(request).orElse("???"));
// log each reported failure
int failureCount=1;
for(ShardSearchFailure fail: response.getShardFailures()) {
String msg = String.format(
"Shard search failure [%s/%s]; reason=%s, index=%s, shard=%s, status=%s, nodeId=%s",
failureCount,
errors,
ExceptionUtils.getRootCauseMessage(fail.getCause()),
fail.index(),
fail.shardId(),
fail.status(),
fail.shard().getNodeId());
LOG.error(msg, fail.getCause());
}
}
项目:metron
文件:ElasticsearchRequestSubmitterTest.java
@Test
public void searchShouldHandleShardFailure() throws InvalidSearchException {
// mocks
SearchResponse response = mock(SearchResponse.class);
SearchRequest request = new SearchRequest();
ShardSearchFailure fail = mock(ShardSearchFailure.class);
SearchShardTarget target = new SearchShardTarget("node1", mock(Index.class), 1, "metron");
// response will have status of OK
when(response.status()).thenReturn(RestStatus.OK);
// the response will report shard failures
when(response.getFailedShards()).thenReturn(1);
when(response.getTotalShards()).thenReturn(2);
// the response will return the failures
ShardSearchFailure[] failures = { fail };
when(response.getShardFailures()).thenReturn(failures);
// shard failure needs to report the node
when(fail.shard()).thenReturn(target);
// shard failure needs to report details of failure
when(fail.index()).thenReturn("bro_index_2017-10-11");
when(fail.shardId()).thenReturn(1);
// search should succeed, even with failed shards
ElasticsearchRequestSubmitter submitter = setup(response);
SearchResponse actual = submitter.submitSearch(request);
assertNotNull(actual);
}
项目:elasticsearch-qrcache
文件:QueryResultCache.java
private SearchResponse readFromCache(final BytesReference value)
throws IOException {
final long startTime = System.nanoTime();
final StreamInput in = value.streamInput();
Map<String, Object> headers = null;
if (in.readBoolean()) {
headers = in.readMap();
}
final InternalSearchResponse internalResponse = new InternalSearchResponse(
null, null, null, null, false, null);
internalResponse.readFrom(in);
final int totalShards = in.readVInt();
final int successfulShards = in.readVInt();
final int size = in.readVInt();
ShardSearchFailure[] shardFailures;
if (size == 0) {
shardFailures = ShardSearchFailure.EMPTY_ARRAY;
} else {
shardFailures = new ShardSearchFailure[size];
for (int i = 0; i < shardFailures.length; i++) {
shardFailures[i] = readShardSearchFailure(in);
}
}
final String scrollId = in.readOptionalString();
final long tookInMillis = (System.nanoTime() - startTime) / 1000000;
final SearchResponse response = new SearchResponse(internalResponse,
scrollId, totalShards, successfulShards, tookInMillis,
shardFailures);
if (headers != null) {
for (final Map.Entry<String, Object> entry : headers.entrySet()) {
response.putHeader(entry.getKey(), entry.getValue());
}
}
return response;
}
项目:sakai
文件:ElasticSearchService.java
@Override
public SearchResponse search(String searchTerms, List<String> references, List<String> siteIds, int start, int end, Map<String,String> additionalSearchInfromation) {
return new SearchResponse(
new InternalSearchResponse(new InternalSearchHits(new InternalSearchHit[0], 0, 0.0f), new InternalFacets(Collections.EMPTY_LIST), new InternalAggregations(Collections.EMPTY_LIST), new Suggest(), false, false),
"no-op",
1,
1,
1,
new ShardSearchFailure[0]
);
}
项目:dev-search
文件:CodeSearchIndexService.java
private SearchResponse checkResponseForErrors(String query, SearchResponse response) {
for (ShardSearchFailure failure : response.getShardFailures()) {
LOG.error("Shard failure with query {}: {}", query, failure.reason());
}
// Possibly throw an exception here.
return response;
}
项目:siren-join
文件:CoordinateSearchResponse.java
@Override
public ShardSearchFailure[] getShardFailures() {
return searchResponse.getShardFailures();
}
项目:elasticsearch-reindex-tool
文件:QueryProcessTest.java
private SearchResponse createSearchResponseWithScrollId(String scrollId) {
return new SearchResponse(InternalSearchResponse.empty(), scrollId, 1, 1, 1, new ShardSearchFailure[0]);
}
项目:dcp-api
文件:StatsClientService.java
/**
* Write ES search statistics record about successful search.
*
* @param type of search performed
* @param responseUuid UUID of response (also returned over search REST API)
* @param resp response from search attempt
* @param dateInMillis timestamp when search was performed
* @param querySettings performed
*/
public void writeStatisticsRecord(StatsRecordType type, String responseUuid, SearchResponse resp, long dateInMillis,
QuerySettings querySettings) {
if (!statsConfiguration.enabled()) {
return;
}
if (resp == null) {
return;
}
Map<String, Object> source = new HashMap<String, Object>();
source.put(FIELD_RESPONSE_UUID, responseUuid);
source.put("took", resp.getTookInMillis());
source.put("timed_out", resp.isTimedOut());
source.put("total_hits", resp.getHits().totalHits());
source.put("max_score", resp.getHits().maxScore());
source.put("shards_successful", resp.getSuccessfulShards());
source.put("shards_failed", resp.getFailedShards());
source.put(FIELD_STATUS, resp.status().name());
if (resp.getFailedShards() > 0) {
for (ShardSearchFailure ssf : resp.getShardFailures()) {
source.put("shard_failure", ssf.reason());
}
}
addQuery(source, querySettings);
if (resp.getHits().totalHits() > 0) {
List<String> hitIds = new ArrayList<String>();
for (SearchHit hit : resp.getHits().getHits()) {
hitIds.add(hit.getId());
}
source.put("returned_hits", hitIds.size());
source.put(FIELD_HITS_ID, hitIds);
}
writeStatisticsRecord(type, dateInMillis, source);
}
项目:searchisko
文件:StatsClientService.java
/**
* Write ES search statistics record about successful search.
*
* @param type of search performed
* @param responseUuid UUID of response (also returned over search REST API)
* @param resp response from search attempt
* @param dateInMillis timestamp when search was performed
* @param querySettings performed
*/
public void writeStatisticsRecord(StatsRecordType type, String responseUuid, SearchResponse resp, long dateInMillis,
QuerySettings querySettings) {
if (!statsConfiguration.enabled()) {
return;
}
if (resp == null) {
return;
}
Map<String, Object> source = new HashMap<>();
source.put(FIELD_RESPONSE_UUID, responseUuid);
source.put("took", resp.getTookInMillis());
source.put("timed_out", resp.isTimedOut());
source.put("total_hits", resp.getHits().totalHits());
source.put("max_score", resp.getHits().maxScore());
source.put("shards_successful", resp.getSuccessfulShards());
source.put("shards_failed", resp.getFailedShards());
source.put(FIELD_STATUS, resp.status().name());
if (resp.getFailedShards() > 0) {
for (ShardSearchFailure ssf : resp.getShardFailures()) {
source.put("shard_failure", ssf.reason());
}
}
addQuery(source, querySettings);
if (resp.getHits().totalHits() > 0) {
List<String> hitIds = new ArrayList<>();
for (SearchHit hit : resp.getHits().getHits()) {
hitIds.add(hit.getId());
}
source.put("returned_hits", hitIds.size());
source.put(FIELD_HITS_ID, hitIds);
}
writeStatisticsRecord(type, dateInMillis, source);
}