Search in sources :

Example 36 with Response

use of org.opensearch.client.Response in project OpenSearch by opensearch-project.

the class Netty4BadRequestIT method testBadRequest.

public void testBadRequest() throws IOException {
    final Response response = client().performRequest(new Request("GET", "/_nodes/settings"));
    final ObjectPath objectPath = ObjectPath.createFromResponse(response);
    final Map<String, Object> map = objectPath.evaluate("nodes");
    int maxMaxInitialLineLength = Integer.MIN_VALUE;
    final Setting<ByteSizeValue> httpMaxInitialLineLength = HttpTransportSettings.SETTING_HTTP_MAX_INITIAL_LINE_LENGTH;
    final String key = httpMaxInitialLineLength.getKey().substring("http.".length());
    for (Map.Entry<String, Object> entry : map.entrySet()) {
        @SuppressWarnings("unchecked") final Map<String, Object> settings = (Map<String, Object>) ((Map<String, Object>) entry.getValue()).get("settings");
        final int maxIntialLineLength;
        if (settings.containsKey("http")) {
            @SuppressWarnings("unchecked") final Map<String, Object> httpSettings = (Map<String, Object>) settings.get("http");
            if (httpSettings.containsKey(key)) {
                maxIntialLineLength = ByteSizeValue.parseBytesSizeValue((String) httpSettings.get(key), key).bytesAsInt();
            } else {
                maxIntialLineLength = httpMaxInitialLineLength.getDefault(Settings.EMPTY).bytesAsInt();
            }
        } else {
            maxIntialLineLength = httpMaxInitialLineLength.getDefault(Settings.EMPTY).bytesAsInt();
        }
        maxMaxInitialLineLength = Math.max(maxMaxInitialLineLength, maxIntialLineLength);
    }
    final String path = "/" + new String(new byte[maxMaxInitialLineLength], Charset.forName("UTF-8")).replace('\0', 'a');
    final ResponseException e = expectThrows(ResponseException.class, () -> client().performRequest(new Request(randomFrom("GET", "POST", "PUT"), path)));
    assertThat(e.getResponse().getStatusLine().getStatusCode(), equalTo(BAD_REQUEST.getStatus()));
    assertThat(e, hasToString(containsString("too_long_frame_exception")));
    assertThat(e, hasToString(matches("An HTTP line is larger than \\d+ bytes")));
}
Also used : ObjectPath(org.opensearch.test.rest.yaml.ObjectPath) ResponseException(org.opensearch.client.ResponseException) Request(org.opensearch.client.Request) ByteSizeValue(org.opensearch.common.unit.ByteSizeValue) Matchers.hasToString(org.hamcrest.Matchers.hasToString) Matchers.containsString(org.hamcrest.Matchers.containsString) Response(org.opensearch.client.Response) Map(java.util.Map)

Example 37 with Response

use of org.opensearch.client.Response in project OpenSearch by opensearch-project.

the class Netty4BadRequestIT method testInvalidParameterValue.

public void testInvalidParameterValue() throws IOException {
    final Request request = new Request("GET", "/_cluster/settings");
    request.addParameter("pretty", "neither-true-nor-false");
    final ResponseException e = expectThrows(ResponseException.class, () -> client().performRequest(request));
    final Response response = e.getResponse();
    assertThat(response.getStatusLine().getStatusCode(), equalTo(400));
    final ObjectPath objectPath = ObjectPath.createFromResponse(response);
    final Map<String, Object> map = objectPath.evaluate("error");
    assertThat(map.get("type"), equalTo("illegal_argument_exception"));
    assertThat(map.get("reason"), equalTo("Failed to parse value [neither-true-nor-false] as only [true] or [false] are allowed."));
}
Also used : Response(org.opensearch.client.Response) ObjectPath(org.opensearch.test.rest.yaml.ObjectPath) ResponseException(org.opensearch.client.ResponseException) Request(org.opensearch.client.Request) Matchers.hasToString(org.hamcrest.Matchers.hasToString) Matchers.containsString(org.hamcrest.Matchers.containsString)

Example 38 with Response

use of org.opensearch.client.Response in project OpenSearch by opensearch-project.

the class RepositoryURLClientYamlTestSuiteIT method registerRepositories.

/**
 * This method registers 3 snapshot/restore repositories:
 * - repository-fs: this FS repository is used to create snapshots.
 * - repository-url: this URL repository is used to restore snapshots created using the previous repository. It uses
 * the URLFixture to restore snapshots over HTTP.
 * - repository-file: similar as the previous repository but using a file:// prefix instead of http://.
 */
@Before
public void registerRepositories() throws IOException {
    Request clusterSettingsRequest = new Request("GET", "/_cluster/settings");
    clusterSettingsRequest.addParameter("include_defaults", "true");
    clusterSettingsRequest.addParameter("filter_path", "defaults.path.repo,defaults.repositories.url.allowed_urls");
    Response clusterSettingsResponse = client().performRequest(clusterSettingsRequest);
    Map<String, Object> clusterSettings = entityAsMap(clusterSettingsResponse);
    @SuppressWarnings("unchecked") List<String> pathRepos = (List<String>) XContentMapValues.extractValue("defaults.path.repo", clusterSettings);
    assertThat(pathRepos, notNullValue());
    assertThat(pathRepos, hasSize(1));
    final String pathRepo = pathRepos.get(0);
    final URI pathRepoUri = PathUtils.get(pathRepo).toUri().normalize();
    // Create a FS repository using the path.repo location
    Request createFsRepositoryRequest = new Request("PUT", "/_snapshot/repository-fs");
    createFsRepositoryRequest.setEntity(buildRepositorySettings(FsRepository.TYPE, Settings.builder().put("location", pathRepo).build()));
    Response createFsRepositoryResponse = client().performRequest(createFsRepositoryRequest);
    assertThat(createFsRepositoryResponse.getStatusLine().getStatusCode(), equalTo(RestStatus.OK.getStatus()));
    // Create a URL repository using the file://{path.repo} URL
    Request createFileRepositoryRequest = new Request("PUT", "/_snapshot/repository-file");
    createFileRepositoryRequest.setEntity(buildRepositorySettings("url", Settings.builder().put("url", pathRepoUri.toString()).build()));
    Response createFileRepositoryResponse = client().performRequest(createFileRepositoryRequest);
    assertThat(createFileRepositoryResponse.getStatusLine().getStatusCode(), equalTo(RestStatus.OK.getStatus()));
    // Create a URL repository using the http://{fixture} URL
    @SuppressWarnings("unchecked") List<String> allowedUrls = (List<String>) XContentMapValues.extractValue("defaults.repositories.url.allowed_urls", clusterSettings);
    for (String allowedUrl : allowedUrls) {
        try {
            InetAddress inetAddress = InetAddress.getByName(new URL(allowedUrl).getHost());
            if (inetAddress.isAnyLocalAddress() || inetAddress.isLoopbackAddress()) {
                Request createUrlRepositoryRequest = new Request("PUT", "/_snapshot/repository-url");
                createUrlRepositoryRequest.setEntity(buildRepositorySettings("url", Settings.builder().put("url", allowedUrl).build()));
                Response createUrlRepositoryResponse = client().performRequest(createUrlRepositoryRequest);
                assertThat(createUrlRepositoryResponse.getStatusLine().getStatusCode(), equalTo(RestStatus.OK.getStatus()));
                break;
            }
        } catch (Exception e) {
            logger.debug("Failed to resolve inet address for allowed URL [{}], skipping", allowedUrl);
        }
    }
}
Also used : Response(org.opensearch.client.Response) Request(org.opensearch.client.Request) List(java.util.List) URI(java.net.URI) InetAddress(java.net.InetAddress) URL(java.net.URL) IOException(java.io.IOException) Before(org.junit.Before)

Example 39 with Response

use of org.opensearch.client.Response in project OpenSearch by opensearch-project.

the class HaHdfsFailoverTestSuiteIT method testHAFailoverWithRepository.

public void testHAFailoverWithRepository() throws Exception {
    RestClient client = client();
    String esKerberosPrincipal = System.getProperty("test.krb5.principal.es");
    String hdfsKerberosPrincipal = System.getProperty("test.krb5.principal.hdfs");
    String kerberosKeytabLocation = System.getProperty("test.krb5.keytab.hdfs");
    String ports = System.getProperty("test.hdfs-fixture.ports");
    String nn1Port = "10001";
    String nn2Port = "10002";
    if (ports.length() > 0) {
        final Path path = PathUtils.get(ports);
        final List<String> lines = AccessController.doPrivileged((PrivilegedExceptionAction<List<String>>) () -> {
            return Files.readAllLines(path);
        });
        nn1Port = lines.get(0);
        nn2Port = lines.get(1);
    }
    boolean securityEnabled = hdfsKerberosPrincipal != null;
    Configuration hdfsConfiguration = new Configuration();
    hdfsConfiguration.set("dfs.nameservices", "ha-hdfs");
    hdfsConfiguration.set("dfs.ha.namenodes.ha-hdfs", "nn1,nn2");
    hdfsConfiguration.set("dfs.namenode.rpc-address.ha-hdfs.nn1", "localhost:" + nn1Port);
    hdfsConfiguration.set("dfs.namenode.rpc-address.ha-hdfs.nn2", "localhost:" + nn2Port);
    hdfsConfiguration.set("dfs.client.failover.proxy.provider.ha-hdfs", "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider");
    AccessController.doPrivileged((PrivilegedExceptionAction<Void>) () -> {
        if (securityEnabled) {
            // ensure that keytab exists
            Path kt = PathUtils.get(kerberosKeytabLocation);
            if (Files.exists(kt) == false) {
                throw new IllegalStateException("Could not locate keytab at " + kerberosKeytabLocation);
            }
            if (Files.isReadable(kt) != true) {
                throw new IllegalStateException("Could not read keytab at " + kerberosKeytabLocation);
            }
            logger.info("Keytab Length: " + Files.readAllBytes(kt).length);
            // set principal names
            hdfsConfiguration.set("dfs.namenode.kerberos.principal", hdfsKerberosPrincipal);
            hdfsConfiguration.set("dfs.datanode.kerberos.principal", hdfsKerberosPrincipal);
            hdfsConfiguration.set("dfs.data.transfer.protection", "authentication");
            SecurityUtil.setAuthenticationMethod(UserGroupInformation.AuthenticationMethod.KERBEROS, hdfsConfiguration);
            UserGroupInformation.setConfiguration(hdfsConfiguration);
            UserGroupInformation.loginUserFromKeytab(hdfsKerberosPrincipal, kerberosKeytabLocation);
        } else {
            SecurityUtil.setAuthenticationMethod(UserGroupInformation.AuthenticationMethod.SIMPLE, hdfsConfiguration);
            UserGroupInformation.setConfiguration(hdfsConfiguration);
            UserGroupInformation.getCurrentUser();
        }
        return null;
    });
    // Create repository
    {
        Request request = new Request("PUT", "/_snapshot/hdfs_ha_repo_read");
        request.setJsonEntity("{" + "\"type\":\"hdfs\"," + "\"settings\":{" + "\"uri\": \"hdfs://ha-hdfs/\",\n" + "\"path\": \"/user/opensearch/existing/readonly-repository\"," + "\"readonly\": \"true\"," + securityCredentials(securityEnabled, esKerberosPrincipal) + "\"conf.dfs.nameservices\": \"ha-hdfs\"," + "\"conf.dfs.ha.namenodes.ha-hdfs\": \"nn1,nn2\"," + "\"conf.dfs.namenode.rpc-address.ha-hdfs.nn1\": \"localhost:" + nn1Port + "\"," + "\"conf.dfs.namenode.rpc-address.ha-hdfs.nn2\": \"localhost:" + nn2Port + "\"," + "\"conf.dfs.client.failover.proxy.provider.ha-hdfs\": " + "\"org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider\"" + "}" + "}");
        Response response = client.performRequest(request);
        Assert.assertEquals(200, response.getStatusLine().getStatusCode());
    }
    // Get repository
    {
        Response response = client.performRequest(new Request("GET", "/_snapshot/hdfs_ha_repo_read/_all"));
        Assert.assertEquals(200, response.getStatusLine().getStatusCode());
    }
    // Failover the namenode to the second.
    failoverHDFS("nn1", "nn2", hdfsConfiguration);
    // Get repository again
    {
        Response response = client.performRequest(new Request("GET", "/_snapshot/hdfs_ha_repo_read/_all"));
        Assert.assertEquals(200, response.getStatusLine().getStatusCode());
    }
}
Also used : Path(java.nio.file.Path) Response(org.opensearch.client.Response) Configuration(org.apache.hadoop.conf.Configuration) RestClient(org.opensearch.client.RestClient) Request(org.opensearch.client.Request) ArrayList(java.util.ArrayList) List(java.util.List)

Example 40 with Response

use of org.opensearch.client.Response in project OpenSearch by opensearch-project.

the class IndexingPressureRestIT method testIndexingPressureStats.

@SuppressWarnings("unchecked")
public void testIndexingPressureStats() throws IOException {
    Request createRequest = new Request("PUT", "/index_name");
    createRequest.setJsonEntity("{\"settings\": {\"index\": {\"number_of_shards\": 1, \"number_of_replicas\": 1, " + "\"write.wait_for_active_shards\": 2}}}");
    final Response indexCreatedResponse = getRestClient().performRequest(createRequest);
    assertThat(indexCreatedResponse.getStatusLine().getStatusCode(), equalTo(OK.getStatus()));
    Request successfulIndexingRequest = new Request("POST", "/index_name/_doc/");
    successfulIndexingRequest.setJsonEntity("{\"x\": \"small text\"}");
    final Response indexSuccessFul = getRestClient().performRequest(successfulIndexingRequest);
    assertThat(indexSuccessFul.getStatusLine().getStatusCode(), equalTo(CREATED.getStatus()));
    Request getNodeStats = new Request("GET", "/_nodes/stats/indexing_pressure");
    final Response nodeStats = getRestClient().performRequest(getNodeStats);
    Map<String, Object> nodeStatsMap = XContentHelper.convertToMap(JsonXContent.jsonXContent, nodeStats.getEntity().getContent(), true);
    ArrayList<Object> values = new ArrayList<>(((Map<Object, Object>) nodeStatsMap.get("nodes")).values());
    assertThat(values.size(), equalTo(2));
    XContentTestUtils.JsonMapView node1 = new XContentTestUtils.JsonMapView((Map<String, Object>) values.get(0));
    Integer node1CombinedBytes = node1.get("indexing_pressure.memory.total.combined_coordinating_and_primary_in_bytes");
    Integer node1PrimaryBytes = node1.get("indexing_pressure.memory.total.primary_in_bytes");
    Integer node1ReplicaBytes = node1.get("indexing_pressure.memory.total.replica_in_bytes");
    Integer node1CoordinatingRejections = node1.get("indexing_pressure.memory.total.coordinating_rejections");
    Integer node1PrimaryRejections = node1.get("indexing_pressure.memory.total.primary_rejections");
    XContentTestUtils.JsonMapView node2 = new XContentTestUtils.JsonMapView((Map<String, Object>) values.get(1));
    Integer node2IndexingBytes = node2.get("indexing_pressure.memory.total.combined_coordinating_and_primary_in_bytes");
    Integer node2PrimaryBytes = node2.get("indexing_pressure.memory.total.primary_in_bytes");
    Integer node2ReplicaBytes = node2.get("indexing_pressure.memory.total.replica_in_bytes");
    Integer node2CoordinatingRejections = node2.get("indexing_pressure.memory.total.coordinating_rejections");
    Integer node2PrimaryRejections = node2.get("indexing_pressure.memory.total.primary_rejections");
    if (node1CombinedBytes == 0) {
        assertThat(node2IndexingBytes, greaterThan(0));
        assertThat(node2IndexingBytes, lessThan(1024));
    } else {
        assertThat(node1CombinedBytes, greaterThan(0));
        assertThat(node1CombinedBytes, lessThan(1024));
    }
    if (node1ReplicaBytes == 0) {
        assertThat(node1PrimaryBytes, greaterThan(0));
        assertThat(node1PrimaryBytes, lessThan(1024));
        assertThat(node2ReplicaBytes, greaterThan(0));
        assertThat(node2ReplicaBytes, lessThan(1024));
    } else {
        assertThat(node2PrimaryBytes, greaterThan(0));
        assertThat(node2PrimaryBytes, lessThan(1024));
        assertThat(node2ReplicaBytes, equalTo(0));
        assertThat(node1ReplicaBytes, lessThan(1024));
    }
    assertThat(node1CoordinatingRejections, equalTo(0));
    assertThat(node1PrimaryRejections, equalTo(0));
    assertThat(node2CoordinatingRejections, equalTo(0));
    assertThat(node2PrimaryRejections, equalTo(0));
    Request failedIndexingRequest = new Request("POST", "/index_name/_doc/");
    String largeString = randomAlphaOfLength(10000);
    failedIndexingRequest.setJsonEntity("{\"x\": " + largeString + "}");
    ResponseException exception = expectThrows(ResponseException.class, () -> getRestClient().performRequest(failedIndexingRequest));
    assertThat(exception.getResponse().getStatusLine().getStatusCode(), equalTo(TOO_MANY_REQUESTS.getStatus()));
    Request getNodeStats2 = new Request("GET", "/_nodes/stats/indexing_pressure");
    final Response nodeStats2 = getRestClient().performRequest(getNodeStats2);
    Map<String, Object> nodeStatsMap2 = XContentHelper.convertToMap(JsonXContent.jsonXContent, nodeStats2.getEntity().getContent(), true);
    ArrayList<Object> values2 = new ArrayList<>(((Map<Object, Object>) nodeStatsMap2.get("nodes")).values());
    assertThat(values2.size(), equalTo(2));
    XContentTestUtils.JsonMapView node1AfterRejection = new XContentTestUtils.JsonMapView((Map<String, Object>) values2.get(0));
    node1CoordinatingRejections = node1AfterRejection.get("indexing_pressure.memory.total.coordinating_rejections");
    node1PrimaryRejections = node1.get("indexing_pressure.memory.total.primary_rejections");
    XContentTestUtils.JsonMapView node2AfterRejection = new XContentTestUtils.JsonMapView((Map<String, Object>) values2.get(1));
    node2CoordinatingRejections = node2AfterRejection.get("indexing_pressure.memory.total.coordinating_rejections");
    node2PrimaryRejections = node2AfterRejection.get("indexing_pressure.memory.total.primary_rejections");
    if (node1CoordinatingRejections == 0) {
        assertThat(node2CoordinatingRejections, equalTo(1));
    } else {
        assertThat(node1CoordinatingRejections, equalTo(1));
    }
    assertThat(node1PrimaryRejections, equalTo(0));
    assertThat(node2PrimaryRejections, equalTo(0));
}
Also used : Response(org.opensearch.client.Response) ResponseException(org.opensearch.client.ResponseException) Request(org.opensearch.client.Request) ArrayList(java.util.ArrayList) XContentTestUtils(org.opensearch.test.XContentTestUtils)

Aggregations

Response (org.opensearch.client.Response)134 Request (org.opensearch.client.Request)113 ResponseException (org.opensearch.client.ResponseException)24 Map (java.util.Map)23 Matchers.containsString (org.hamcrest.Matchers.containsString)20 ArrayList (java.util.ArrayList)17 PutRepositoryRequest (org.opensearch.action.admin.cluster.repositories.put.PutRepositoryRequest)16 RestClient (org.opensearch.client.RestClient)15 HashMap (java.util.HashMap)14 RequestOptions (org.opensearch.client.RequestOptions)12 ObjectPath (org.opensearch.test.rest.yaml.ObjectPath)12 IndexRequest (org.opensearch.action.index.IndexRequest)11 IOException (java.io.IOException)10 List (java.util.List)10 CountDownLatch (java.util.concurrent.CountDownLatch)8 Version (org.opensearch.Version)8 WriteRequest (org.opensearch.action.support.WriteRequest)8 ListTasksResponse (org.opensearch.action.admin.cluster.node.tasks.list.ListTasksResponse)7 IndexResponse (org.opensearch.action.index.IndexResponse)7 CreateIndexRequest (org.opensearch.client.indices.CreateIndexRequest)7