Java源码示例:org.elasticsearch.ElasticsearchStatusException

示例1
@Override
public void handleRequest(final RestRequest request, final RestChannel channel, final NodeClient client)
		throws Exception {
	// Now only support to get user from request,
	// it should work with other elasticsearch identity authentication plugins in fact.
	UsernamePasswordToken user = UsernamePasswordToken.parseToken(request);
	if (user == null) {
		throw new ElasticsearchStatusException("Error: User is null, the request requires user authentication.",
				RestStatus.UNAUTHORIZED);
	} else {
		if (LOG.isDebugEnabled()) {
			LOG.debug("Success to parse user[{}] from request[{}].", user, request);
		}
	}
	threadContext.putTransient(UsernamePasswordToken.USERNAME, user.getUsername());

	String clientIPAddress = RequestUtils.getClientIPAddress(request);
	if (StringUtils.isNotEmpty(clientIPAddress)) {
		threadContext.putTransient(RequestUtils.CLIENT_IP_ADDRESS, clientIPAddress);
	}

	this.restHandler.handleRequest(request, channel, client);
}
 
示例2
@Override
public <Request extends ActionRequest, Response extends ActionResponse> void apply(Task task, String action,
		Request request, ActionListener<Response> listener, ActionFilterChain<Request, Response> chain) {
	String user = threadContext.getTransient(UsernamePasswordToken.USERNAME);
	// If user is not null, then should check permission of the outside caller.
	if (StringUtils.isNotEmpty(user)) {
		List<String> indexs = RequestUtils.getIndexFromRequest(request);
		String clientIPAddress = threadContext.getTransient(RequestUtils.CLIENT_IP_ADDRESS);
		for (String index : indexs) {
			boolean result = rangerElasticsearchAuthorizer.checkPermission(user, null, index, action,
					clientIPAddress);
			if (!result) {
				String errorMsg = "Error: User[{}] could not do action[{}] on index[{}]";
				throw new ElasticsearchStatusException(errorMsg, RestStatus.FORBIDDEN, user, action, index);
			}
		}
	} else {
		if (LOG.isDebugEnabled()) {
			LOG.debug("User is null, no check permission for elasticsearch do action[{}] with request[{}]", action,
					request);
		}
	}
	chain.proceed(task, action, request, listener);
}
 
示例3
private static long queryDocumentCount(
        final RestHighLevelClient client)
        throws IOException {
    final SearchSourceBuilder searchSourceBuilder =
            new SearchSourceBuilder()
                    .size(0)
                    .fetchSource(false);
    final SearchRequest searchRequest =
            new SearchRequest(MavenHardcodedConstants.ES_INDEX_NAME)
                    .source(searchSourceBuilder);
    try {
        final SearchResponse searchResponse =
                client.search(searchRequest, RequestOptions.DEFAULT);
        return searchResponse.getHits().getTotalHits().value;
    } catch (ElasticsearchStatusException error) {
        if (RestStatus.NOT_FOUND.equals(error.status())) {
            return 0L;
        }
        throw new IOException(error);
    }
}
 
示例4
private static List<Map<String, Object>> queryDocuments(
        final RestHighLevelClient client
) throws IOException {
    final SearchSourceBuilder searchSourceBuilder =
            new SearchSourceBuilder()
                    .size(LOG_EVENT_COUNT)
                    .fetchSource(true);
    final SearchRequest searchRequest =
            new SearchRequest(MavenHardcodedConstants.ES_INDEX_NAME)
                    .source(searchSourceBuilder);
    try {
        final SearchResponse searchResponse =
                client.search(searchRequest, RequestOptions.DEFAULT);
        return Arrays
                .stream(searchResponse.getHits().getHits())
                .map(SearchHit::getSourceAsMap)
                .collect(Collectors.toList());
    } catch (ElasticsearchStatusException error) {
        if (RestStatus.NOT_FOUND.equals(error.status())) {
            return Collections.emptyList();
        }
        throw new IOException(error);
    }
}
 
示例5
@Test
public void testTryToDeleteNonExistingIndex() throws IOException {
    ElasticsearchStatusException ese = null;
    try {
        client.indices().delete(new DeleteIndexRequest(SECOND_INDEX), RequestOptions.DEFAULT);
    } catch (ElasticsearchStatusException e) {
        ese = e;
    }
    assertThat(ese).isNotNull();
    assertThat(ese.status().getStatus()).isEqualTo(404);
}
 
示例6
private void createIndexIfNeeded(ReactorElasticSearchClient client, IndexName indexName, XContentBuilder settings) throws IOException {
    try {
        client.indices()
            .create(
                new CreateIndexRequest(indexName.getValue())
                    .source(settings), RequestOptions.DEFAULT);
    } catch (ElasticsearchStatusException exception) {
        if (exception.getMessage().contains(INDEX_ALREADY_EXISTS_EXCEPTION_MESSAGE)) {
            LOGGER.info("Index [{}] already exists", indexName.getValue());
        } else {
            throw exception;
        }
    }
}
 
示例7
public static UsernamePasswordToken parseToken(RestRequest request) {

		Map<String, List<String>> headers = request.getHeaders();
		if (MapUtils.isEmpty(headers)) {
			return null;
		}
		List<String> authStrs = headers.get(BASIC_AUTH_HEADER);
		if (CollectionUtils.isEmpty(authStrs)) {
			return null;
		}

		String authStr = authStrs.get(0);
		if (StringUtils.isEmpty(authStr)) {
			return null;
		}

		String userPass = "";
		try {
			userPass = new String(Base64.getUrlDecoder().decode(authStr.substring(BASIC_AUTH_PREFIX.length())));
		} catch (IllegalArgumentException e) {
			throw new ElasticsearchStatusException("Error: Failed to parse user authentication.",
					RestStatus.UNAUTHORIZED, e);
		}

		int i = StringUtils.indexOf(userPass, ':');
		if (i <= 0) {
			throw new ElasticsearchStatusException(
					"Error: Parse user authentication to get the wrong userPass[{}].",
					RestStatus.UNAUTHORIZED, userPass);
		}
		return new UsernamePasswordToken(StringUtils.substring(userPass, 0, i),
				StringUtils.substring(userPass, i + 1, userPass.length()));

	}
 
示例8
@PostConstruct
public void insertDataSample() {

	try {
		RestClients.create(ClientConfiguration.localhost()).rest().indices()
				.create(new CreateIndexRequest("conference-index"), RequestOptions.DEFAULT);
	} catch (IOException | ElasticsearchStatusException e) {
		// just ignore it
	}

	// Remove all documents
	repository.deleteAll().subscribe();

	// Save data sample
	repository
			.save(Conference.builder().date("2014-11-06").name("Spring eXchange 2014 - London")
					.keywords(Arrays.asList("java", "spring")).location(new GeoPoint(51.500152D, -0.126236D)).build())
			.then().as(StepVerifier::create).verifyComplete();
	repository
			.save(Conference.builder().date("2014-12-07").name("Scala eXchange 2014 - London")
					.keywords(Arrays.asList("scala", "play", "java")).location(new GeoPoint(51.500152D, -0.126236D)).build())
			.then().as(StepVerifier::create).verifyComplete();
	repository.save(Conference.builder().date("2014-11-20").name("Elasticsearch 2014 - Berlin")
			.keywords(Arrays.asList("java", "elasticsearch", "kibana")).location(new GeoPoint(52.5234051D, 13.4113999))
			.build()).then().as(StepVerifier::create).verifyComplete();
	repository.save(Conference.builder().date("2014-11-12").name("AWS London 2014")
			.keywords(Arrays.asList("cloud", "aws")).location(new GeoPoint(51.500152D, -0.126236D)).build()).then()
			.as(StepVerifier::create).verifyComplete();
	repository.save(Conference.builder().date("2014-10-04").name("JDD14 - Cracow")
			.keywords(Arrays.asList("java", "spring")).location(new GeoPoint(50.0646501D, 19.9449799)).build()).then()
			.as(StepVerifier::create).verifyComplete();
}
 
示例9
private static RestHighLevelClient createClient() throws IOException {

        // Instantiate the client.
        LOGGER.info("instantiating the ES client");
        final HttpHost httpHost = new HttpHost(HOST_NAME, MavenHardcodedConstants.ES_PORT);
        final RestClientBuilder clientBuilder =
                RestClient.builder(httpHost);
        final RestHighLevelClient client = new RestHighLevelClient(clientBuilder);

        // Verify the connection.
        LOGGER.info("verifying the ES connection");
        final ClusterHealthResponse healthResponse = client
                .cluster()
                .health(new ClusterHealthRequest(), RequestOptions.DEFAULT);
        Assertions
                .assertThat(healthResponse.getStatus())
                .isNotEqualTo(ClusterHealthStatus.RED);

        // Delete the index.
        LOGGER.info("deleting the ES index");
        final DeleteIndexRequest deleteRequest =
                new DeleteIndexRequest(MavenHardcodedConstants.ES_INDEX_NAME);
        try {
            final AcknowledgedResponse deleteResponse = client
                    .indices()
                    .delete(deleteRequest, RequestOptions.DEFAULT);
            Assertions
                    .assertThat(deleteResponse.isAcknowledged())
                    .isTrue();
        } catch (ElasticsearchStatusException error) {
            Assertions.assertThat(error)
                    .satisfies(ignored -> Assertions
                            .assertThat(error.status())
                            .isEqualTo(RestStatus.NOT_FOUND));
        }

        return client;

    }
 
示例10
int run(BatchSearch batchSearch) {
    int numberOfResults = 0;
    int throttleMs = parseInt(propertiesProvider.get(BATCH_SEARCH_THROTTLE).orElse("0"));
    int maxTimeSeconds = parseInt(propertiesProvider.get(BATCH_SEARCH_MAX_TIME).orElse("100000"));
    int scrollSize = min(parseInt(propertiesProvider.get(SCROLL_SIZE).orElse("1000")), MAX_SCROLL_SIZE);

    logger.info("running {} queries for batch search {} on project {} with throttle {}ms and scroll size of {}",
            batchSearch.queries.size(), batchSearch.uuid, batchSearch.project, throttleMs, scrollSize);
    repository.setState(batchSearch.uuid, State.RUNNING);
    String query = null;
    try {
        for (String s : batchSearch.queries.keySet()) {
            query = s;
            Indexer.Searcher searcher = indexer.search(batchSearch.project.getId(), Document.class).
                    with(query, batchSearch.fuzziness, batchSearch.phraseMatches).
                    withFieldValues("contentType", batchSearch.fileTypes.toArray(new String[]{})).
                    withPrefixQuery("dirname", batchSearch.paths.toArray(new String[]{})).
                    withoutSource("content").limit(scrollSize);
            List<? extends Entity> docsToProcess = searcher.scroll().collect(toList());

            long beforeScrollLoop = DatashareTime.getInstance().currentTimeMillis();
            while (docsToProcess.size() != 0 && numberOfResults < MAX_BATCH_RESULT_SIZE - MAX_SCROLL_SIZE) {
                repository.saveResults(batchSearch.uuid, query, (List<Document>) docsToProcess);
                if (DatashareTime.getInstance().currentTimeMillis() - beforeScrollLoop < maxTimeSeconds*1000) {
                    DatashareTime.getInstance().sleep(throttleMs);
                } else {
                    throw new TimeoutException("Batch timed out after " + maxTimeSeconds + "s");
                }
                numberOfResults += docsToProcess.size();
                docsToProcess = searcher.scroll().collect(toList());
            }
        }
    } catch (ElasticsearchStatusException esEx) {
        logger.error("elasticsearch exception when running batch " + batchSearch.uuid, esEx);
        repository.setState(batchSearch.uuid, new SearchException(query,
                stream(esEx.getSuppressed()).filter(t -> t instanceof ResponseException).findFirst().orElse(esEx)));
        return numberOfResults;
    } catch (Exception ex) {
        logger.error("error when running batch " + batchSearch.uuid, ex);
        repository.setState(batchSearch.uuid, new SearchException(query, ex));
        return numberOfResults;
    }
    repository.setState(batchSearch.uuid, State.SUCCESS);
    logger.info("done batch search {} with success", batchSearch.uuid);
    return numberOfResults;
}
 
示例11
@Test(expected = ElasticsearchStatusException.class)
public void test_tag_unknown_document() throws IOException {
    indexer.tag(project(TEST_INDEX), "unknown", "routing", tag("foo"), tag("bar"));
}
 
示例12
@Test(enabled = false, expectedExceptions = ElasticsearchStatusException.class)
public final void invalidIndexNameTest() throws Exception {
    map.put("indexName", "myIndex");
    sink.open(map, mockSinkContext);
}