Skip to content

Commit

Permalink
Added High Level Rest Client for SDK (opensearch-project#306)
Browse files Browse the repository at this point in the history
* Added High Level Rest Client for SDK

Signed-off-by: Owais Kazi <[email protected]>

* Updates method name

Signed-off-by: Owais Kazi <[email protected]>

* Addressed PR Comments

Signed-off-by: Owais Kazi <[email protected]>

* Implements Closeable for SDKClients

Signed-off-by: Owais Kazi <[email protected]>

Signed-off-by: Owais Kazi <[email protected]>
  • Loading branch information
owaiskazi19 authored and kokibas committed Mar 17, 2023
1 parent cc4daa3 commit 25580dd
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 14 deletions.
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ dependencies {
implementation("org.opensearch:opensearch:${opensearchVersion}")
implementation("org.apache.logging.log4j:log4j-api:${log4jVersion}")
implementation("org.apache.logging.log4j:log4j-core:${log4jVersion}")
implementation("org.opensearch.client:opensearch-rest-high-level-client:${opensearchVersion}")
implementation("org.opensearch.client:opensearch-rest-client:${opensearchVersion}")
implementation("org.opensearch.client:opensearch-java:${opensearchVersion}")
implementation("org.opensearch.plugin:transport-netty4-client:${opensearchVersion}")
Expand Down
62 changes: 51 additions & 11 deletions src/main/java/org/opensearch/sdk/SDKClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

package org.opensearch.sdk;

import java.io.Closeable;
import java.io.IOException;

import com.fasterxml.jackson.annotation.JsonTypeInfo;
Expand All @@ -28,6 +29,7 @@
import org.apache.hc.core5.ssl.SSLContextBuilder;
import org.opensearch.client.RestClient;
import org.opensearch.client.RestClientBuilder;
import org.opensearch.client.RestHighLevelClient;
import org.opensearch.client.json.jackson.JacksonJsonpMapper;
import org.opensearch.client.opensearch.OpenSearchClient;
import org.opensearch.client.transport.OpenSearchTransport;
Expand All @@ -38,17 +40,12 @@
/**
* This class creates SDKClient for an extension to make requests to OpenSearch
*/
public class SDKClient {
public class SDKClient implements Closeable {
private OpenSearchClient javaClient;
private RestClient restClient = null;
private RestClient restClient;
private RestHighLevelClient highLevelClient;

/**
* Creates OpenSearchClient for SDK. It also creates a restClient as a wrapper around Java OpenSearchClient
* @param hostAddress The address of OpenSearch cluster, client can connect to
* @param port The port of OpenSearch cluster
* @return SDKClient which is internally an OpenSearchClient. The user is responsible for calling {@link #doCloseRestClient()} when finished with the client
*/
public OpenSearchClient initializeClient(String hostAddress, int port) {
private RestClientBuilder builder(String hostAddress, int port) {
RestClientBuilder builder = RestClient.builder(new HttpHost(hostAddress, port));
builder.setStrictDeprecationMode(true);
builder.setHttpClientConfigCallback(httpClientBuilder -> {
Expand All @@ -74,6 +71,17 @@ public TlsDetails create(final SSLEngine sslEngine) {
throw new RuntimeException(e);
}
});
return builder;
}

/**
* Creates OpenSearchClient for SDK. It also creates a restClient as a wrapper around Java OpenSearchClient
* @param hostAddress The address of OpenSearch cluster, client can connect to
* @param port The port of OpenSearch cluster
* @return The SDKClient implementation of OpenSearchClient. The user is responsible for calling {@link #doCloseJavaClient()} when finished with the client
*/
public OpenSearchClient initializeJavaClient(String hostAddress, int port) {
RestClientBuilder builder = builder(hostAddress, port);

restClient = builder.build();

Expand All @@ -91,13 +99,45 @@ public TlsDetails create(final SSLEngine sslEngine) {
}

/**
* Close this client.
* @deprecated Provided for compatibility with existing plugins to permit migration. New development should not use this client
* Creates High Level Rest Client for SDK.
* @param hostAddress The address of OpenSearch cluster, client can connect to
* @param port The port of OpenSearch cluster
* @return The SDKClient implementation of RestHighLevelClient. The user is responsible for calling {@link #doCloseHighLevelClient()} when finished with the client
*/
@Deprecated
public RestHighLevelClient initializeRestClient(String hostAddress, int port) {
RestClientBuilder builder = builder(hostAddress, port);

highLevelClient = new RestHighLevelClient(builder);
return highLevelClient;
}

/**
* Close java client.
*
* @throws IOException if closing the restClient fails
*/
public void doCloseRestClient() throws IOException {
public void doCloseJavaClient() throws IOException {
if (restClient != null) {
restClient.close();
}
}

/**
* Close high level rest client.
*
* @throws IOException if closing the highLevelClient fails
*/
public void doCloseHighLevelClient() throws IOException {
if (highLevelClient != null) {
highLevelClient.close();
}
}

@Override
public void close() throws IOException {
doCloseJavaClient();
doCloseHighLevelClient();
}
}
23 changes: 20 additions & 3 deletions src/test/java/org/opensearch/sdk/TestSDKClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
package org.opensearch.sdk;

import org.junit.jupiter.api.Test;
import org.opensearch.client.RequestOptions;
import org.opensearch.client.RestHighLevelClient;
import org.opensearch.client.opensearch.OpenSearchClient;
import org.opensearch.client.opensearch.indices.Alias;
import org.opensearch.client.opensearch.indices.CreateIndexRequest;
Expand All @@ -23,9 +25,9 @@ public class TestSDKClient extends OpenSearchTestCase {
SDKClient sdkClient = new SDKClient();

@Test
public void testCreateClient() throws Exception {
public void testCreateJavaClient() throws Exception {

OpenSearchClient testClient = sdkClient.initializeClient("localhost", 9200);
OpenSearchClient testClient = sdkClient.initializeJavaClient("localhost", 9200);
assertInstanceOf(OpenSearchClient.class, testClient);

assertThrows(
Expand All @@ -38,7 +40,22 @@ public void testCreateClient() throws Exception {
)
);

sdkClient.doCloseRestClient();
sdkClient.doCloseJavaClient();
}

@Test
public void testCreateHighLevelRestClient() throws Exception {
RestHighLevelClient testClient = sdkClient.initializeRestClient("localhost", 9200);

// Using the package name here as Java uses package name if the filename from different packages are same
org.opensearch.client.indices.CreateIndexRequest createIndexRequest = new org.opensearch.client.indices.CreateIndexRequest(
"my-index"
);

assertThrows(ConnectException.class, () -> testClient.indices().create(createIndexRequest, RequestOptions.DEFAULT));

sdkClient.doCloseHighLevelClient();

}

}

0 comments on commit 25580dd

Please sign in to comment.