use of org.opensearch.rest.RestStatus in project OpenSearch by opensearch-project.
the class RestHighLevelClient method parseResponseException.
/**
* Converts a {@link ResponseException} obtained from the low level REST client into an {@link OpenSearchException}.
* If a response body was returned, tries to parse it as an error returned from OpenSearch.
* If no response body was returned or anything goes wrong while parsing the error, returns a new {@link OpenSearchStatusException}
* that wraps the original {@link ResponseException}. The potential exception obtained while parsing is added to the returned
* exception as a suppressed exception. This method is guaranteed to not throw any exception eventually thrown while parsing.
*/
protected final OpenSearchStatusException parseResponseException(ResponseException responseException) {
Response response = responseException.getResponse();
HttpEntity entity = response.getEntity();
OpenSearchStatusException opensearchException;
RestStatus restStatus = RestStatus.fromCode(response.getStatusLine().getStatusCode());
if (entity == null) {
opensearchException = new OpenSearchStatusException(responseException.getMessage(), restStatus, responseException);
} else {
try {
opensearchException = parseEntity(entity, BytesRestResponse::errorFromXContent);
opensearchException.addSuppressed(responseException);
} catch (Exception e) {
opensearchException = new OpenSearchStatusException("Unable to parse response body", restStatus, responseException);
opensearchException.addSuppressed(e);
}
}
return opensearchException;
}
use of org.opensearch.rest.RestStatus in project OpenSearch by opensearch-project.
the class RestHighLevelClientTests method testPerformRequestOnResponseExceptionWithEntity.
public void testPerformRequestOnResponseExceptionWithEntity() throws IOException {
MainRequest mainRequest = new MainRequest();
CheckedFunction<MainRequest, Request, IOException> requestConverter = request -> new Request(HttpGet.METHOD_NAME, "/");
RestStatus restStatus = randomFrom(RestStatus.values());
HttpResponse httpResponse = new BasicHttpResponse(newStatusLine(restStatus));
httpResponse.setEntity(new NStringEntity("{\"error\":\"test error message\",\"status\":" + restStatus.getStatus() + "}", ContentType.APPLICATION_JSON));
Response mockResponse = new Response(REQUEST_LINE, new HttpHost("localhost", 9200), httpResponse);
ResponseException responseException = new ResponseException(mockResponse);
when(restClient.performRequest(any(Request.class))).thenThrow(responseException);
OpenSearchException openSearchException = expectThrows(OpenSearchException.class, () -> restHighLevelClient.performRequest(mainRequest, requestConverter, RequestOptions.DEFAULT, response -> response.getStatusLine().getStatusCode(), Collections.emptySet()));
assertEquals("OpenSearch exception [type=exception, reason=test error message]", openSearchException.getMessage());
assertEquals(restStatus, openSearchException.status());
assertSame(responseException, openSearchException.getSuppressed()[0]);
}
use of org.opensearch.rest.RestStatus in project OpenSearch by opensearch-project.
the class RestHighLevelClientTests method testPerformRequestOnResponseExceptionWithBrokenEntity.
public void testPerformRequestOnResponseExceptionWithBrokenEntity() throws IOException {
MainRequest mainRequest = new MainRequest();
CheckedFunction<MainRequest, Request, IOException> requestConverter = request -> new Request(HttpGet.METHOD_NAME, "/");
RestStatus restStatus = randomFrom(RestStatus.values());
HttpResponse httpResponse = new BasicHttpResponse(newStatusLine(restStatus));
httpResponse.setEntity(new NStringEntity("{\"error\":", ContentType.APPLICATION_JSON));
Response mockResponse = new Response(REQUEST_LINE, new HttpHost("localhost", 9200), httpResponse);
ResponseException responseException = new ResponseException(mockResponse);
when(restClient.performRequest(any(Request.class))).thenThrow(responseException);
OpenSearchException openSearchException = expectThrows(OpenSearchException.class, () -> restHighLevelClient.performRequest(mainRequest, requestConverter, RequestOptions.DEFAULT, response -> response.getStatusLine().getStatusCode(), Collections.emptySet()));
assertEquals("Unable to parse response body", openSearchException.getMessage());
assertEquals(restStatus, openSearchException.status());
assertSame(responseException, openSearchException.getCause());
assertThat(openSearchException.getSuppressed()[0], instanceOf(JsonParseException.class));
}
use of org.opensearch.rest.RestStatus in project OpenSearch by opensearch-project.
the class RestHighLevelClientTests method testPerformRequestOnSuccess.
public void testPerformRequestOnSuccess() throws IOException {
MainRequest mainRequest = new MainRequest();
CheckedFunction<MainRequest, Request, IOException> requestConverter = request -> new Request(HttpGet.METHOD_NAME, "/");
RestStatus restStatus = randomFrom(RestStatus.values());
HttpResponse httpResponse = new BasicHttpResponse(newStatusLine(restStatus));
Response mockResponse = new Response(REQUEST_LINE, new HttpHost("localhost", 9200), httpResponse);
when(restClient.performRequest(any(Request.class))).thenReturn(mockResponse);
{
Integer result = restHighLevelClient.performRequest(mainRequest, requestConverter, RequestOptions.DEFAULT, response -> response.getStatusLine().getStatusCode(), Collections.emptySet());
assertEquals(restStatus.getStatus(), result.intValue());
}
{
IOException ioe = expectThrows(IOException.class, () -> restHighLevelClient.performRequest(mainRequest, requestConverter, RequestOptions.DEFAULT, response -> {
throw new IllegalStateException();
}, Collections.emptySet()));
assertEquals("Unable to parse response body for Response{requestLine=GET / http/1.1, host=http://localhost:9200, " + "response=http/1.1 " + restStatus.getStatus() + " " + restStatus.name() + "}", ioe.getMessage());
}
}
use of org.opensearch.rest.RestStatus in project OpenSearch by opensearch-project.
the class ClusterClientDocumentationIT method testClusterHealth.
@SuppressWarnings("unused")
public void testClusterHealth() throws IOException {
RestHighLevelClient client = highLevelClient();
client.indices().create(new CreateIndexRequest("index"), RequestOptions.DEFAULT);
{
// tag::health-request
ClusterHealthRequest request = new ClusterHealthRequest();
// end::health-request
}
{
// tag::health-request-indices-ctr
ClusterHealthRequest request = new ClusterHealthRequest("index1", "index2");
// end::health-request-indices-ctr
}
{
// tag::health-request-indices-setter
ClusterHealthRequest request = new ClusterHealthRequest();
request.indices("index1", "index2");
// end::health-request-indices-setter
}
ClusterHealthRequest request = new ClusterHealthRequest();
// tag::health-request-timeout
// <1>
request.timeout(TimeValue.timeValueSeconds(50));
// <2>
request.timeout("50s");
// end::health-request-timeout
// tag::health-request-master-timeout
// <1>
request.masterNodeTimeout(TimeValue.timeValueSeconds(20));
// <2>
request.masterNodeTimeout("20s");
// end::health-request-master-timeout
// tag::health-request-wait-status
// <1>
request.waitForStatus(ClusterHealthStatus.YELLOW);
// <2>
request.waitForYellowStatus();
// end::health-request-wait-status
// tag::health-request-wait-events
// <1>
request.waitForEvents(Priority.NORMAL);
// end::health-request-wait-events
// tag::health-request-level
// <1>
request.level(ClusterHealthRequest.Level.SHARDS);
// end::health-request-level
// tag::health-request-wait-relocation
// <1>
request.waitForNoRelocatingShards(true);
// end::health-request-wait-relocation
// tag::health-request-wait-initializing
// <1>
request.waitForNoInitializingShards(true);
// end::health-request-wait-initializing
// tag::health-request-wait-nodes
// <1>
request.waitForNodes("2");
// <2>
request.waitForNodes(">=2");
// <3>
request.waitForNodes("le(2)");
// end::health-request-wait-nodes
// tag::health-request-wait-active
// <1>
request.waitForActiveShards(ActiveShardCount.ALL);
// <2>
request.waitForActiveShards(1);
// end::health-request-wait-active
// tag::health-request-local
// <1>
request.local(true);
// end::health-request-local
// tag::health-execute
ClusterHealthResponse response = client.cluster().health(request, RequestOptions.DEFAULT);
// end::health-execute
assertThat(response.isTimedOut(), equalTo(false));
assertThat(response.status(), equalTo(RestStatus.OK));
assertThat(response.getStatus(), equalTo(ClusterHealthStatus.YELLOW));
assertThat(response, notNullValue());
// tag::health-response-general
// <1>
String clusterName = response.getClusterName();
// <2>
ClusterHealthStatus status = response.getStatus();
// end::health-response-general
// tag::health-response-request-status
// <1>
boolean timedOut = response.isTimedOut();
// <2>
RestStatus restStatus = response.status();
// end::health-response-request-status
// tag::health-response-nodes
// <1>
int numberOfNodes = response.getNumberOfNodes();
// <2>
int numberOfDataNodes = response.getNumberOfDataNodes();
// end::health-response-nodes
{
// tag::health-response-shards
// <1>
int activeShards = response.getActiveShards();
// <2>
int activePrimaryShards = response.getActivePrimaryShards();
// <3>
int relocatingShards = response.getRelocatingShards();
// <4>
int initializingShards = response.getInitializingShards();
// <5>
int unassignedShards = response.getUnassignedShards();
// <6>
int delayedUnassignedShards = response.getDelayedUnassignedShards();
// <7>
double activeShardsPercent = response.getActiveShardsPercent();
// end::health-response-shards
}
// tag::health-response-task
// <1>
TimeValue taskMaxWaitingTime = response.getTaskMaxWaitingTime();
// <2>
int numberOfPendingTasks = response.getNumberOfPendingTasks();
// <3>
int numberOfInFlightFetch = response.getNumberOfInFlightFetch();
// end::health-response-task
// tag::health-response-indices
// <1>
Map<String, ClusterIndexHealth> indices = response.getIndices();
// end::health-response-indices
{
// tag::health-response-index
// <1>
ClusterIndexHealth index = indices.get("index");
ClusterHealthStatus indexStatus = index.getStatus();
int numberOfShards = index.getNumberOfShards();
int numberOfReplicas = index.getNumberOfReplicas();
int activeShards = index.getActiveShards();
int activePrimaryShards = index.getActivePrimaryShards();
int initializingShards = index.getInitializingShards();
int relocatingShards = index.getRelocatingShards();
int unassignedShards = index.getUnassignedShards();
// end::health-response-index
// tag::health-response-shard-details
// <1>
Map<Integer, ClusterShardHealth> shards = index.getShards();
ClusterShardHealth shardHealth = shards.get(0);
int shardId = shardHealth.getShardId();
ClusterHealthStatus shardStatus = shardHealth.getStatus();
int active = shardHealth.getActiveShards();
int initializing = shardHealth.getInitializingShards();
int unassigned = shardHealth.getUnassignedShards();
int relocating = shardHealth.getRelocatingShards();
boolean primaryActive = shardHealth.isPrimaryActive();
// end::health-response-shard-details
}
}
Aggregations