Skip to content

Commit d1f3d8d

Browse files
sohaibiftikharnik9000
authored andcommitted
rest-high-level: added get cluster settings (#31706)
Relates to #27205
1 parent 790ee31 commit d1f3d8d

File tree

14 files changed

+591
-33
lines changed

14 files changed

+591
-33
lines changed

client/rest-high-level/src/main/java/org/elasticsearch/client/ClusterClient.java

+31
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import org.elasticsearch.action.ActionListener;
2424
import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest;
2525
import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse;
26+
import org.elasticsearch.action.admin.cluster.settings.ClusterGetSettingsRequest;
27+
import org.elasticsearch.action.admin.cluster.settings.ClusterGetSettingsResponse;
2628
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsRequest;
2729
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsResponse;
2830
import org.elasticsearch.rest.RestStatus;
@@ -100,6 +102,35 @@ public void putSettingsAsync(ClusterUpdateSettingsRequest clusterUpdateSettingsR
100102
ClusterUpdateSettingsResponse::fromXContent, listener, emptySet(), headers);
101103
}
102104

105+
/**
106+
* Get the cluster wide settings using the Cluster Get Settings API.
107+
* See <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-get-settings.html"> Cluster Get Settings
108+
* API on elastic.co</a>
109+
* @param clusterGetSettingsRequest the request
110+
* @param options the request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
111+
* @return the response
112+
* @throws IOException in case there is a problem sending the request or parsing back the response
113+
*/
114+
public ClusterGetSettingsResponse getSettings(ClusterGetSettingsRequest clusterGetSettingsRequest, RequestOptions options)
115+
throws IOException {
116+
return restHighLevelClient.performRequestAndParseEntity(clusterGetSettingsRequest, RequestConverters::clusterGetSettings,
117+
options, ClusterGetSettingsResponse::fromXContent, emptySet());
118+
}
119+
120+
/**
121+
* Asynchronously get the cluster wide settings using the Cluster Get Settings API.
122+
* See <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-get-settings.html"> Cluster Get Settings
123+
* API on elastic.co</a>
124+
* @param clusterGetSettingsRequest the request
125+
* @param options the request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
126+
* @param listener the listener to be notified upon request completion
127+
*/
128+
public void getSettingsAsync(ClusterGetSettingsRequest clusterGetSettingsRequest, RequestOptions options,
129+
ActionListener<ClusterGetSettingsResponse> listener) {
130+
restHighLevelClient.performRequestAsyncAndParseEntity(clusterGetSettingsRequest, RequestConverters::clusterGetSettings,
131+
options, ClusterGetSettingsResponse::fromXContent, listener, emptySet());
132+
}
133+
103134
/**
104135
* Get cluster health using the Cluster Health API.
105136
* See

client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java

+14-2
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesRequest;
3737
import org.elasticsearch.action.admin.cluster.repositories.put.PutRepositoryRequest;
3838
import org.elasticsearch.action.admin.cluster.repositories.verify.VerifyRepositoryRequest;
39+
import org.elasticsearch.action.admin.cluster.settings.ClusterGetSettingsRequest;
3940
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsRequest;
4041
import org.elasticsearch.action.admin.cluster.snapshots.create.CreateSnapshotRequest;
4142
import org.elasticsearch.action.admin.cluster.storedscripts.DeleteStoredScriptRequest;
@@ -613,7 +614,7 @@ static Request searchTemplate(SearchTemplateRequest searchTemplateRequest) throw
613614
request.setEntity(createEntity(searchTemplateRequest, REQUEST_BODY_CONTENT_TYPE));
614615
return request;
615616
}
616-
617+
617618
static Request multiSearchTemplate(MultiSearchTemplateRequest multiSearchTemplateRequest) throws IOException {
618619
Request request = new Request(HttpPost.METHOD_NAME, "/_msearch/template");
619620

@@ -627,7 +628,7 @@ static Request multiSearchTemplate(MultiSearchTemplateRequest multiSearchTemplat
627628
byte[] source = MultiSearchTemplateRequest.writeMultiLineFormat(multiSearchTemplateRequest, xContent);
628629
request.setEntity(new ByteArrayEntity(source, createContentType(xContent.type())));
629630
return request;
630-
}
631+
}
631632

632633
static Request existsAlias(GetAliasesRequest getAliasesRequest) {
633634
if ((getAliasesRequest.indices() == null || getAliasesRequest.indices().length == 0) &&
@@ -719,6 +720,17 @@ static Request clusterPutSettings(ClusterUpdateSettingsRequest clusterUpdateSett
719720
return request;
720721
}
721722

723+
static Request clusterGetSettings(ClusterGetSettingsRequest clusterGetSettingsRequest) throws IOException {
724+
Request request = new Request(HttpGet.METHOD_NAME, "/_cluster/settings");
725+
726+
Params parameters = new Params(request);
727+
parameters.withLocal(clusterGetSettingsRequest.local());
728+
parameters.withIncludeDefaults(clusterGetSettingsRequest.includeDefaults());
729+
parameters.withMasterTimeout(clusterGetSettingsRequest.masterNodeTimeout());
730+
731+
return request;
732+
}
733+
722734
static Request getPipeline(GetPipelineRequest getPipelineRequest) {
723735
String endpoint = new EndpointBuilder()
724736
.addPathPartAsIs("_ingest/pipeline")

client/rest-high-level/src/test/java/org/elasticsearch/client/ClusterClientIT.java

+43
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import org.elasticsearch.ElasticsearchException;
2323
import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest;
2424
import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse;
25+
import org.elasticsearch.action.admin.cluster.settings.ClusterGetSettingsRequest;
26+
import org.elasticsearch.action.admin.cluster.settings.ClusterGetSettingsResponse;
2527
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsRequest;
2628
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsResponse;
2729
import org.elasticsearch.cluster.health.ClusterHealthStatus;
@@ -42,6 +44,7 @@
4244
import static java.util.Collections.emptyMap;
4345
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked;
4446
import static org.hamcrest.Matchers.equalTo;
47+
import static org.hamcrest.Matchers.greaterThan;
4548
import static org.hamcrest.Matchers.notNullValue;
4649
import static org.hamcrest.Matchers.nullValue;
4750

@@ -115,6 +118,46 @@ public void testClusterUpdateSettingNonExistent() {
115118
"Elasticsearch exception [type=illegal_argument_exception, reason=transient setting [" + setting + "], not recognized]"));
116119
}
117120

121+
public void testClusterGetSettings() throws IOException {
122+
final String transientSettingKey = RecoverySettings.INDICES_RECOVERY_MAX_BYTES_PER_SEC_SETTING.getKey();
123+
final int transientSettingValue = 10;
124+
125+
final String persistentSettingKey = EnableAllocationDecider.CLUSTER_ROUTING_ALLOCATION_ENABLE_SETTING.getKey();
126+
final String persistentSettingValue = EnableAllocationDecider.Allocation.NONE.name();
127+
128+
Settings transientSettings =
129+
Settings.builder().put(transientSettingKey, transientSettingValue, ByteSizeUnit.BYTES).build();
130+
Settings persistentSettings = Settings.builder().put(persistentSettingKey, persistentSettingValue).build();
131+
clusterUpdateSettings(persistentSettings, transientSettings);
132+
133+
ClusterGetSettingsRequest request = new ClusterGetSettingsRequest();
134+
ClusterGetSettingsResponse response = execute(
135+
request, highLevelClient().cluster()::getSettings, highLevelClient().cluster()::getSettingsAsync);
136+
assertEquals(persistentSettings, response.getPersistentSettings());
137+
assertEquals(transientSettings, response.getTransientSettings());
138+
assertEquals(0, response.getDefaultSettings().size());
139+
}
140+
141+
public void testClusterGetSettingsWithDefault() throws IOException {
142+
final String transientSettingKey = RecoverySettings.INDICES_RECOVERY_MAX_BYTES_PER_SEC_SETTING.getKey();
143+
final int transientSettingValue = 10;
144+
145+
final String persistentSettingKey = EnableAllocationDecider.CLUSTER_ROUTING_ALLOCATION_ENABLE_SETTING.getKey();
146+
final String persistentSettingValue = EnableAllocationDecider.Allocation.NONE.name();
147+
148+
Settings transientSettings =
149+
Settings.builder().put(transientSettingKey, transientSettingValue, ByteSizeUnit.BYTES).build();
150+
Settings persistentSettings = Settings.builder().put(persistentSettingKey, persistentSettingValue).build();
151+
clusterUpdateSettings(persistentSettings, transientSettings);
152+
153+
ClusterGetSettingsRequest request = new ClusterGetSettingsRequest().includeDefaults(true);
154+
ClusterGetSettingsResponse response = execute(
155+
request, highLevelClient().cluster()::getSettings, highLevelClient().cluster()::getSettingsAsync);
156+
assertEquals(persistentSettings, response.getPersistentSettings());
157+
assertEquals(transientSettings, response.getTransientSettings());
158+
assertThat(response.getDefaultSettings().size(), greaterThan(0));
159+
}
160+
118161
public void testClusterHealthGreen() throws IOException {
119162
ClusterHealthRequest request = new ClusterHealthRequest();
120163
request.timeout("5s");

client/rest-high-level/src/test/java/org/elasticsearch/client/ESRestHighLevelClientTestCase.java

+10
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@
2121

2222
import org.apache.http.Header;
2323
import org.elasticsearch.action.ActionListener;
24+
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsRequest;
2425
import org.elasticsearch.action.ingest.PutPipelineRequest;
2526
import org.elasticsearch.action.support.PlainActionFuture;
2627
import org.elasticsearch.common.bytes.BytesReference;
28+
import org.elasticsearch.common.settings.Settings;
2729
import org.elasticsearch.common.xcontent.XContentBuilder;
2830
import org.elasticsearch.common.xcontent.XContentType;
2931
import org.elasticsearch.ingest.Pipeline;
@@ -164,4 +166,12 @@ protected static void createPipeline(String pipelineId) throws IOException {
164166
protected static void createPipeline(PutPipelineRequest putPipelineRequest) throws IOException {
165167
assertOK(client().performRequest(RequestConverters.putPipeline(putPipelineRequest)));
166168
}
169+
170+
protected static void clusterUpdateSettings(Settings persistentSettings,
171+
Settings transientSettings) throws IOException {
172+
ClusterUpdateSettingsRequest request = new ClusterUpdateSettingsRequest();
173+
request.persistentSettings(persistentSettings);
174+
request.transientSettings(transientSettings);
175+
assertOK(client().performRequest(RequestConverters.clusterPutSettings(request)));
176+
}
167177
}

client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java

+29-13
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesRequest;
3737
import org.elasticsearch.action.admin.cluster.repositories.put.PutRepositoryRequest;
3838
import org.elasticsearch.action.admin.cluster.repositories.verify.VerifyRepositoryRequest;
39+
import org.elasticsearch.action.admin.cluster.settings.ClusterGetSettingsRequest;
3940
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsRequest;
4041
import org.elasticsearch.action.admin.cluster.snapshots.create.CreateSnapshotRequest;
4142
import org.elasticsearch.action.admin.cluster.snapshots.delete.DeleteSnapshotRequest;
@@ -1402,42 +1403,42 @@ public void testRenderSearchTemplate() throws Exception {
14021403
assertEquals(Collections.emptyMap(), request.getParameters());
14031404
assertToXContentBody(searchTemplateRequest, request.getEntity());
14041405
}
1405-
1406+
14061407
public void testMultiSearchTemplate() throws Exception {
14071408
final int numSearchRequests = randomIntBetween(1, 10);
14081409
MultiSearchTemplateRequest multiSearchTemplateRequest = new MultiSearchTemplateRequest();
1409-
1410+
14101411
for (int i = 0; i < numSearchRequests; i++) {
14111412
// Create a random request.
14121413
String[] indices = randomIndicesNames(0, 5);
14131414
SearchRequest searchRequest = new SearchRequest(indices);
1414-
1415+
14151416
Map<String, String> expectedParams = new HashMap<>();
14161417
setRandomSearchParams(searchRequest, expectedParams);
1417-
1418+
14181419
// scroll is not supported in the current msearch or msearchtemplate api, so unset it:
14191420
searchRequest.scroll((Scroll) null);
14201421
// batched reduce size is currently not set-able on a per-request basis as it is a query string parameter only
14211422
searchRequest.setBatchedReduceSize(SearchRequest.DEFAULT_BATCHED_REDUCE_SIZE);
1422-
1423+
14231424
setRandomIndicesOptions(searchRequest::indicesOptions, searchRequest::indicesOptions, expectedParams);
1424-
1425+
14251426
SearchTemplateRequest searchTemplateRequest = new SearchTemplateRequest(searchRequest);
1426-
1427+
14271428
searchTemplateRequest.setScript("{\"query\": { \"match\" : { \"{{field}}\" : \"{{value}}\" }}}");
14281429
searchTemplateRequest.setScriptType(ScriptType.INLINE);
14291430
searchTemplateRequest.setProfile(randomBoolean());
1430-
1431+
14311432
Map<String, Object> scriptParams = new HashMap<>();
14321433
scriptParams.put("field", "name");
14331434
scriptParams.put("value", randomAlphaOfLengthBetween(2, 5));
14341435
searchTemplateRequest.setScriptParams(scriptParams);
1435-
1436-
multiSearchTemplateRequest.add(searchTemplateRequest);
1436+
1437+
multiSearchTemplateRequest.add(searchTemplateRequest);
14371438
}
14381439

14391440
Request multiRequest = RequestConverters.multiSearchTemplate(multiSearchTemplateRequest);
1440-
1441+
14411442
assertEquals(HttpPost.METHOD_NAME, multiRequest.getMethod());
14421443
assertEquals("/_msearch/template", multiRequest.getEndpoint());
14431444
List<SearchTemplateRequest> searchRequests = multiSearchTemplateRequest.requests();
@@ -1446,9 +1447,9 @@ public void testMultiSearchTemplate() throws Exception {
14461447
HttpEntity actualEntity = multiRequest.getEntity();
14471448
byte[] expectedBytes = MultiSearchTemplateRequest.writeMultiLineFormat(multiSearchTemplateRequest, XContentType.JSON.xContent());
14481449
assertEquals(XContentType.JSON.mediaTypeWithoutParameters(), actualEntity.getContentType().getValue());
1449-
assertEquals(new BytesArray(expectedBytes), new BytesArray(EntityUtils.toByteArray(actualEntity)));
1450+
assertEquals(new BytesArray(expectedBytes), new BytesArray(EntityUtils.toByteArray(actualEntity)));
14501451
}
1451-
1452+
14521453
public void testExistsAlias() {
14531454
GetAliasesRequest getAliasesRequest = new GetAliasesRequest();
14541455
String[] indices = randomBoolean() ? null : randomIndicesNames(0, 5);
@@ -1667,6 +1668,21 @@ public void testClusterPutSettings() throws IOException {
16671668
assertEquals(expectedParams, expectedRequest.getParameters());
16681669
}
16691670

1671+
public void testClusterGetSettings() throws IOException {
1672+
ClusterGetSettingsRequest request = new ClusterGetSettingsRequest();
1673+
Map<String, String> expectedParams = new HashMap<>();
1674+
setRandomMasterTimeout(request, expectedParams);
1675+
request.includeDefaults(randomBoolean());
1676+
if (request.includeDefaults()) {
1677+
expectedParams.put("include_defaults", String.valueOf(true));
1678+
}
1679+
1680+
Request expectedRequest = RequestConverters.clusterGetSettings(request);
1681+
assertEquals("/_cluster/settings", expectedRequest.getEndpoint());
1682+
assertEquals(HttpGet.METHOD_NAME, expectedRequest.getMethod());
1683+
assertEquals(expectedParams, expectedRequest.getParameters());
1684+
}
1685+
16701686
public void testPutPipeline() throws IOException {
16711687
String pipelineId = "some_pipeline_id";
16721688
PutPipelineRequest request = new PutPipelineRequest(

client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/ClusterClientDocumentationIT.java

+68
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import org.elasticsearch.action.LatchedActionListener;
2424
import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest;
2525
import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse;
26+
import org.elasticsearch.action.admin.cluster.settings.ClusterGetSettingsRequest;
27+
import org.elasticsearch.action.admin.cluster.settings.ClusterGetSettingsResponse;
2628
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsRequest;
2729
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsResponse;
2830
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
@@ -49,6 +51,7 @@
4951
import java.util.concurrent.TimeUnit;
5052

5153
import static org.hamcrest.Matchers.equalTo;
54+
import static org.hamcrest.Matchers.greaterThan;
5255
import static org.hamcrest.Matchers.notNullValue;
5356

5457
/**
@@ -189,6 +192,71 @@ public void onFailure(Exception e) {
189192
}
190193
}
191194

195+
public void testClusterGetSettings() throws IOException {
196+
RestHighLevelClient client = highLevelClient();
197+
198+
// tag::get-settings-request
199+
ClusterGetSettingsRequest request = new ClusterGetSettingsRequest();
200+
// end::get-settings-request
201+
202+
// tag::get-settings-request-includeDefaults
203+
request.includeDefaults(true); // <1>
204+
// end::get-settings-request-includeDefaults
205+
206+
// tag::get-settings-request-local
207+
request.local(true); // <1>
208+
// end::get-settings-request-local
209+
210+
// tag::get-settings-request-masterTimeout
211+
request.masterNodeTimeout(TimeValue.timeValueMinutes(1)); // <1>
212+
request.masterNodeTimeout("1m"); // <2>
213+
// end::get-settings-request-masterTimeout
214+
215+
// tag::get-settings-execute
216+
ClusterGetSettingsResponse response = client.cluster().getSettings(request, RequestOptions.DEFAULT); // <1>
217+
// end::get-settings-execute
218+
219+
// tag::get-settings-response
220+
Settings persistentSettings = response.getPersistentSettings(); // <1>
221+
Settings transientSettings = response.getTransientSettings(); // <2>
222+
Settings defaultSettings = response.getDefaultSettings(); // <3>
223+
String settingValue = response.getSetting("cluster.routing.allocation.enable"); // <4>
224+
// end::get-settings-response
225+
226+
assertThat(defaultSettings.size(), greaterThan(0));
227+
}
228+
229+
public void testClusterGetSettingsAsync() throws InterruptedException {
230+
RestHighLevelClient client = highLevelClient();
231+
232+
ClusterGetSettingsRequest request = new ClusterGetSettingsRequest();
233+
234+
// tag::get-settings-execute-listener
235+
ActionListener<ClusterGetSettingsResponse> listener =
236+
new ActionListener<ClusterGetSettingsResponse>() {
237+
@Override
238+
public void onResponse(ClusterGetSettingsResponse response) {
239+
// <1>
240+
}
241+
242+
@Override
243+
public void onFailure(Exception e) {
244+
// <2>
245+
}
246+
};
247+
// end::get-settings-execute-listener
248+
249+
// Replace the empty listener by a blocking listener in test
250+
final CountDownLatch latch = new CountDownLatch(1);
251+
listener = new LatchedActionListener<>(listener, latch);
252+
253+
// tag::get-settings-execute-async
254+
client.cluster().getSettingsAsync(request, RequestOptions.DEFAULT, listener); // <1>
255+
// end::get-settings-execute-async
256+
257+
assertTrue(latch.await(30L, TimeUnit.SECONDS));
258+
}
259+
192260
public void testClusterHealth() throws IOException {
193261
RestHighLevelClient client = highLevelClient();
194262
client.indices().create(new CreateIndexRequest("index"), RequestOptions.DEFAULT);

0 commit comments

Comments
 (0)