Search in sources :

Example 11 with ShardSearchFailure

use of org.elasticsearch.action.search.ShardSearchFailure in project elasticsearch by elastic.

the class StatsIT method assertShardExecutionState.

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()));
}
Also used : ParameterizedMessage(org.apache.logging.log4j.message.ParameterizedMessage) ShardSearchFailure(org.elasticsearch.action.search.ShardSearchFailure)

Example 12 with ShardSearchFailure

use of org.elasticsearch.action.search.ShardSearchFailure in project elasticsearch by elastic.

the class FieldSortIT method testIgnoreUnmapped.

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);
}
Also used : SearchPhaseExecutionException(org.elasticsearch.action.search.SearchPhaseExecutionException) ShardSearchFailure(org.elasticsearch.action.search.ShardSearchFailure) SearchResponse(org.elasticsearch.action.search.SearchResponse) ElasticsearchAssertions.assertSearchResponse(org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse)

Example 13 with ShardSearchFailure

use of org.elasticsearch.action.search.ShardSearchFailure in project elasticsearch by elastic.

the class QueryProfilerIT method testPhrase.

public void testPhrase() throws Exception {
    createIndex("test");
    ensureGreen();
    int numDocs = randomIntBetween(100, 150);
    IndexRequestBuilder[] docs = new IndexRequestBuilder[numDocs];
    for (int i = 0; i < numDocs; i++) {
        docs[i] = client().prepareIndex("test", "type1", String.valueOf(i)).setSource("field1", English.intToEnglish(i) + " " + English.intToEnglish(i + 1), "field2", i);
    }
    indexRandom(true, docs);
    refresh();
    QueryBuilder q = QueryBuilders.matchPhraseQuery("field1", "one two");
    logger.info("Query: {}", q);
    SearchResponse resp = client().prepareSearch().setQuery(q).setIndices("test").setTypes("type1").setProfile(true).setSearchType(SearchType.QUERY_THEN_FETCH).execute().actionGet();
    if (resp.getShardFailures().length > 0) {
        for (ShardSearchFailure f : resp.getShardFailures()) {
            logger.error("Shard search failure: {}", f);
        }
        fail();
    }
    assertNotNull("Profile response element should not be null", resp.getProfileResults());
    assertThat("Profile response should not be an empty array", resp.getProfileResults().size(), not(0));
    for (Map.Entry<String, ProfileShardResult> shardResult : resp.getProfileResults().entrySet()) {
        for (QueryProfileShardResult searchProfiles : shardResult.getValue().getQueryProfileResults()) {
            for (ProfileResult result : searchProfiles.getQueryResults()) {
                assertNotNull(result.getQueryName());
                assertNotNull(result.getLuceneDescription());
                assertThat(result.getTime(), greaterThan(0L));
                assertNotNull(result.getTimeBreakdown());
            }
            CollectorResult result = searchProfiles.getCollectorResult();
            assertThat(result.getName(), not(isEmptyOrNullString()));
            assertThat(result.getTime(), greaterThan(0L));
        }
    }
}
Also used : RandomQueryGenerator.randomQueryBuilder(org.elasticsearch.search.profile.query.RandomQueryGenerator.randomQueryBuilder) QueryBuilder(org.elasticsearch.index.query.QueryBuilder) Matchers.isEmptyOrNullString(org.hamcrest.Matchers.isEmptyOrNullString) MultiSearchResponse(org.elasticsearch.action.search.MultiSearchResponse) SearchResponse(org.elasticsearch.action.search.SearchResponse) IndexRequestBuilder(org.elasticsearch.action.index.IndexRequestBuilder) ProfileResult(org.elasticsearch.search.profile.ProfileResult) ShardSearchFailure(org.elasticsearch.action.search.ShardSearchFailure) Map(java.util.Map) ProfileShardResult(org.elasticsearch.search.profile.ProfileShardResult)

Example 14 with ShardSearchFailure

use of org.elasticsearch.action.search.ShardSearchFailure in project elasticsearch by elastic.

the class SimpleSortIT method testDocumentsWithNullValue.

public void testDocumentsWithNullValue() throws Exception {
    // TODO: sort shouldn't fail when sort field is mapped dynamically
    // We have to specify mapping explicitly because by the time search is performed dynamic mapping might not
    // be propagated to all nodes yet and sort operation fail when the sort field is not defined
    String mapping = jsonBuilder().startObject().startObject("type1").startObject("properties").startObject("id").field("type", "keyword").endObject().startObject("svalue").field("type", "keyword").endObject().endObject().endObject().endObject().string();
    assertAcked(prepareCreate("test").addMapping("type1", mapping, XContentType.JSON));
    ensureGreen();
    client().prepareIndex("test", "type1").setSource(jsonBuilder().startObject().field("id", "1").field("svalue", "aaa").endObject()).get();
    client().prepareIndex("test", "type1").setSource(jsonBuilder().startObject().field("id", "2").nullField("svalue").endObject()).get();
    client().prepareIndex("test", "type1").setSource(jsonBuilder().startObject().field("id", "3").field("svalue", "bbb").endObject()).get();
    flush();
    refresh();
    Script scripField = new Script(ScriptType.INLINE, CustomScriptPlugin.NAME, "doc['id'].value", Collections.emptyMap());
    SearchResponse searchResponse = client().prepareSearch().setQuery(matchAllQuery()).addScriptField("id", scripField).addSort("svalue", SortOrder.ASC).get();
    assertNoFailures(searchResponse);
    assertThat(searchResponse.getHits().getTotalHits(), equalTo(3L));
    assertThat(searchResponse.getHits().getAt(0).field("id").getValue(), equalTo("1"));
    assertThat(searchResponse.getHits().getAt(1).field("id").getValue(), equalTo("3"));
    assertThat(searchResponse.getHits().getAt(2).field("id").getValue(), equalTo("2"));
    searchResponse = client().prepareSearch().setQuery(matchAllQuery()).addScriptField("id", new Script(ScriptType.INLINE, CustomScriptPlugin.NAME, "doc['id'].values[0]", Collections.emptyMap())).addSort("svalue", SortOrder.ASC).get();
    assertNoFailures(searchResponse);
    assertThat(searchResponse.getHits().getTotalHits(), equalTo(3L));
    assertThat(searchResponse.getHits().getAt(0).field("id").getValue(), equalTo("1"));
    assertThat(searchResponse.getHits().getAt(1).field("id").getValue(), equalTo("3"));
    assertThat(searchResponse.getHits().getAt(2).field("id").getValue(), equalTo("2"));
    searchResponse = client().prepareSearch().setQuery(matchAllQuery()).addScriptField("id", scripField).addSort("svalue", SortOrder.DESC).get();
    if (searchResponse.getFailedShards() > 0) {
        logger.warn("Failed shards:");
        for (ShardSearchFailure shardSearchFailure : searchResponse.getShardFailures()) {
            logger.warn("-> {}", shardSearchFailure);
        }
    }
    assertThat(searchResponse.getFailedShards(), equalTo(0));
    assertThat(searchResponse.getHits().getTotalHits(), equalTo(3L));
    assertThat(searchResponse.getHits().getAt(0).field("id").getValue(), equalTo("3"));
    assertThat(searchResponse.getHits().getAt(1).field("id").getValue(), equalTo("1"));
    assertThat(searchResponse.getHits().getAt(2).field("id").getValue(), equalTo("2"));
    // a query with docs just with null values
    searchResponse = client().prepareSearch().setQuery(termQuery("id", "2")).addScriptField("id", scripField).addSort("svalue", SortOrder.DESC).get();
    if (searchResponse.getFailedShards() > 0) {
        logger.warn("Failed shards:");
        for (ShardSearchFailure shardSearchFailure : searchResponse.getShardFailures()) {
            logger.warn("-> {}", shardSearchFailure);
        }
    }
    assertThat(searchResponse.getFailedShards(), equalTo(0));
    assertThat(searchResponse.getHits().getTotalHits(), equalTo(1L));
    assertThat(searchResponse.getHits().getAt(0).field("id").getValue(), equalTo("2"));
}
Also used : Script(org.elasticsearch.script.Script) Matchers.containsString(org.hamcrest.Matchers.containsString) ShardSearchFailure(org.elasticsearch.action.search.ShardSearchFailure) SearchResponse(org.elasticsearch.action.search.SearchResponse)

Example 15 with ShardSearchFailure

use of org.elasticsearch.action.search.ShardSearchFailure in project elasticsearch by elastic.

the class ElasticsearchExceptionTests method randomExceptions.

public static Tuple<Throwable, ElasticsearchException> randomExceptions() {
    Throwable actual;
    ElasticsearchException expected;
    int type = randomIntBetween(0, 5);
    switch(type) {
        case 0:
            actual = new ClusterBlockException(singleton(DiscoverySettings.NO_MASTER_BLOCK_WRITES));
            expected = new ElasticsearchException("Elasticsearch exception [type=cluster_block_exception, " + "reason=blocked by: [SERVICE_UNAVAILABLE/2/no master];]");
            break;
        case 1:
            actual = new CircuitBreakingException("Data too large", 123, 456);
            expected = new ElasticsearchException("Elasticsearch exception [type=circuit_breaking_exception, reason=Data too large]");
            break;
        case 2:
            actual = new SearchParseException(new TestSearchContext(null), "Parse failure", new XContentLocation(12, 98));
            expected = new ElasticsearchException("Elasticsearch exception [type=search_parse_exception, reason=Parse failure]");
            break;
        case 3:
            actual = new IllegalArgumentException("Closed resource", new RuntimeException("Resource"));
            expected = new ElasticsearchException("Elasticsearch exception [type=illegal_argument_exception, reason=Closed resource]", new ElasticsearchException("Elasticsearch exception [type=runtime_exception, reason=Resource]"));
            break;
        case 4:
            actual = new SearchPhaseExecutionException("search", "all shards failed", new ShardSearchFailure[] { new ShardSearchFailure(new ParsingException(1, 2, "foobar", null), new SearchShardTarget("node_1", new Index("foo", "_na_"), 1)) });
            expected = new ElasticsearchException("Elasticsearch exception [type=search_phase_execution_exception, " + "reason=all shards failed]");
            expected.addMetadata("es.phase", "search");
            break;
        case 5:
            actual = new ElasticsearchException("Parsing failed", new ParsingException(9, 42, "Wrong state", new NullPointerException("Unexpected null value")));
            ElasticsearchException expectedCause = new ElasticsearchException("Elasticsearch exception [type=parsing_exception, " + "reason=Wrong state]", new ElasticsearchException("Elasticsearch exception [type=null_pointer_exception, " + "reason=Unexpected null value]"));
            expected = new ElasticsearchException("Elasticsearch exception [type=exception, reason=Parsing failed]", expectedCause);
            break;
        default:
            throw new UnsupportedOperationException("No randomized exceptions generated for type [" + type + "]");
    }
    if (actual instanceof ElasticsearchException) {
        ElasticsearchException actualException = (ElasticsearchException) actual;
        if (randomBoolean()) {
            int nbHeaders = randomIntBetween(1, 5);
            Map<String, List<String>> randomHeaders = new HashMap<>(nbHeaders);
            for (int i = 0; i < nbHeaders; i++) {
                List<String> values = new ArrayList<>();
                int nbValues = randomIntBetween(1, 3);
                for (int j = 0; j < nbValues; j++) {
                    values.add(frequently() ? randomAsciiOfLength(5) : "");
                }
                randomHeaders.put("header_" + i, values);
            }
            for (Map.Entry<String, List<String>> entry : randomHeaders.entrySet()) {
                actualException.addHeader(entry.getKey(), entry.getValue());
                expected.addHeader(entry.getKey(), entry.getValue());
            }
            if (rarely()) {
                // Empty or null headers are not printed out by the toXContent method
                actualException.addHeader("ignored", randomBoolean() ? emptyList() : null);
            }
        }
        if (randomBoolean()) {
            int nbMetadata = randomIntBetween(1, 5);
            Map<String, List<String>> randomMetadata = new HashMap<>(nbMetadata);
            for (int i = 0; i < nbMetadata; i++) {
                List<String> values = new ArrayList<>();
                int nbValues = randomIntBetween(1, 3);
                for (int j = 0; j < nbValues; j++) {
                    values.add(frequently() ? randomAsciiOfLength(5) : "");
                }
                randomMetadata.put("es.metadata_" + i, values);
            }
            for (Map.Entry<String, List<String>> entry : randomMetadata.entrySet()) {
                actualException.addMetadata(entry.getKey(), entry.getValue());
                expected.addMetadata(entry.getKey(), entry.getValue());
            }
            if (rarely()) {
                // Empty or null metadata are not printed out by the toXContent method
                actualException.addMetadata("es.ignored", randomBoolean() ? emptyList() : null);
            }
        }
        if (randomBoolean()) {
            int nbResources = randomIntBetween(1, 5);
            for (int i = 0; i < nbResources; i++) {
                String resourceType = "type_" + i;
                String[] resourceIds = new String[randomIntBetween(1, 3)];
                for (int j = 0; j < resourceIds.length; j++) {
                    resourceIds[j] = frequently() ? randomAsciiOfLength(5) : "";
                }
                actualException.setResources(resourceType, resourceIds);
                expected.setResources(resourceType, resourceIds);
            }
        }
    }
    return new Tuple<>(actual, expected);
}
Also used : HashMap(java.util.HashMap) SearchPhaseExecutionException(org.elasticsearch.action.search.SearchPhaseExecutionException) ArrayList(java.util.ArrayList) Index(org.elasticsearch.index.Index) ParsingException(org.elasticsearch.common.ParsingException) Collections.singletonList(java.util.Collections.singletonList) Collections.emptyList(java.util.Collections.emptyList) List(java.util.List) ArrayList(java.util.ArrayList) ShardSearchFailure(org.elasticsearch.action.search.ShardSearchFailure) XContentLocation(org.elasticsearch.common.xcontent.XContentLocation) ClusterBlockException(org.elasticsearch.cluster.block.ClusterBlockException) TestSearchContext(org.elasticsearch.test.TestSearchContext) SearchParseException(org.elasticsearch.search.SearchParseException) CircuitBreakingException(org.elasticsearch.common.breaker.CircuitBreakingException) SearchShardTarget(org.elasticsearch.search.SearchShardTarget) Map(java.util.Map) HashMap(java.util.HashMap) Tuple(org.elasticsearch.common.collect.Tuple)

Aggregations

ShardSearchFailure (org.elasticsearch.action.search.ShardSearchFailure)18 SearchResponse (org.elasticsearch.action.search.SearchResponse)11 SearchPhaseExecutionException (org.elasticsearch.action.search.SearchPhaseExecutionException)10 SearchShardTarget (org.elasticsearch.search.SearchShardTarget)5 IOException (java.io.IOException)4 ArrayList (java.util.ArrayList)4 Index (org.elasticsearch.index.Index)4 ClusterBlockException (org.elasticsearch.cluster.block.ClusterBlockException)3 ParsingException (org.elasticsearch.common.ParsingException)3 CircuitBreakingException (org.elasticsearch.common.breaker.CircuitBreakingException)3 Map (java.util.Map)2 CopyOnWriteArrayList (java.util.concurrent.CopyOnWriteArrayList)2 ParameterizedMessage (org.apache.logging.log4j.message.ParameterizedMessage)2 IndexRequestBuilder (org.elasticsearch.action.index.IndexRequestBuilder)2 SearchRequestBuilder (org.elasticsearch.action.search.SearchRequestBuilder)2 QueryBuilder (org.elasticsearch.index.query.QueryBuilder)2 ShardId (org.elasticsearch.index.shard.ShardId)2 Matchers.containsString (org.hamcrest.Matchers.containsString)2 AuthorisationException (com.atlassian.stash.exception.AuthorisationException)1 Repository (com.atlassian.stash.repository.Repository)1