Skip to content

Commit b94bc70

Browse files
authored
Add Create Repository High Level REST API (#30501)
This commit adds Create Repository, the associated docs and tests for the high level REST API client. A few small changes to the PutRepository Request and Response went into the commit as well.
1 parent 25c823d commit b94bc70

File tree

11 files changed

+512
-45
lines changed

11 files changed

+512
-45
lines changed

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.apache.lucene.util.BytesRef;
3131
import org.elasticsearch.action.DocWriteRequest;
3232
import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesRequest;
33+
import org.elasticsearch.action.admin.cluster.repositories.put.PutRepositoryRequest;
3334
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsRequest;
3435
import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest;
3536
import org.elasticsearch.action.admin.indices.alias.get.GetAliasesRequest;
@@ -679,6 +680,19 @@ static Request getRepositories(GetRepositoriesRequest getRepositoriesRequest) {
679680
return request;
680681
}
681682

683+
static Request createRepository(PutRepositoryRequest putRepositoryRequest) throws IOException {
684+
String endpoint = new EndpointBuilder().addPathPart("_snapshot").addPathPart(putRepositoryRequest.name()).build();
685+
Request request = new Request(HttpPut.METHOD_NAME, endpoint);
686+
687+
Params parameters = new Params(request);
688+
parameters.withMasterTimeout(putRepositoryRequest.masterNodeTimeout());
689+
parameters.withTimeout(putRepositoryRequest.timeout());
690+
parameters.withVerify(putRepositoryRequest.verify());
691+
692+
request.setEntity(createEntity(putRepositoryRequest, REQUEST_BODY_CONTENT_TYPE));
693+
return request;
694+
}
695+
682696
static Request putTemplate(PutIndexTemplateRequest putIndexTemplateRequest) throws IOException {
683697
String endpoint = new EndpointBuilder().addPathPartAsIs("_template").addPathPart(putIndexTemplateRequest.name()).build();
684698
Request request = new Request(HttpPut.METHOD_NAME, endpoint);
@@ -917,6 +931,13 @@ Params withPreserveExisting(boolean preserveExisting) {
917931
}
918932
return this;
919933
}
934+
935+
Params withVerify(boolean verify) {
936+
if (verify) {
937+
return putParam("verify", Boolean.TRUE.toString());
938+
}
939+
return this;
940+
}
920941
}
921942

922943
/**

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

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
import org.elasticsearch.action.ActionListener;
2424
import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesRequest;
2525
import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesResponse;
26-
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsRequest;
27-
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsResponse;
26+
import org.elasticsearch.action.admin.cluster.repositories.put.PutRepositoryRequest;
27+
import org.elasticsearch.action.admin.cluster.repositories.put.PutRepositoryResponse;
2828

2929
import java.io.IOException;
3030

@@ -67,4 +67,27 @@ public void getRepositoriesAsync(GetRepositoriesRequest getRepositoriesRequest,
6767
restHighLevelClient.performRequestAsyncAndParseEntity(getRepositoriesRequest, RequestConverters::getRepositories,
6868
GetRepositoriesResponse::fromXContent, listener, emptySet(), headers);
6969
}
70+
71+
/**
72+
* Creates a snapshot repository.
73+
* <p>
74+
* See <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-snapshots.html"> Snapshot and Restore
75+
* API on elastic.co</a>
76+
*/
77+
public PutRepositoryResponse createRepository(PutRepositoryRequest putRepositoryRequest, Header... headers) throws IOException {
78+
return restHighLevelClient.performRequestAndParseEntity(putRepositoryRequest, RequestConverters::createRepository,
79+
PutRepositoryResponse::fromXContent, emptySet(), headers);
80+
}
81+
82+
/**
83+
* Asynchronously creates a snapshot repository.
84+
* <p>
85+
* See <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-snapshots.html"> Snapshot and Restore
86+
* API on elastic.co</a>
87+
*/
88+
public void createRepositoryAsync(PutRepositoryRequest putRepositoryRequest,
89+
ActionListener<PutRepositoryResponse> listener, Header... headers) {
90+
restHighLevelClient.performRequestAsyncAndParseEntity(putRepositoryRequest, RequestConverters::createRepository,
91+
PutRepositoryResponse::fromXContent, listener, emptySet(), headers);
92+
}
7093
}

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.elasticsearch.action.ActionRequestValidationException;
3131
import org.elasticsearch.action.DocWriteRequest;
3232
import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesRequest;
33+
import org.elasticsearch.action.admin.cluster.repositories.put.PutRepositoryRequest;
3334
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsRequest;
3435
import org.elasticsearch.action.admin.indices.alias.Alias;
3536
import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest;
@@ -77,9 +78,11 @@
7778
import org.elasticsearch.common.Strings;
7879
import org.elasticsearch.common.bytes.BytesArray;
7980
import org.elasticsearch.common.bytes.BytesReference;
81+
import org.elasticsearch.common.io.PathUtils;
8082
import org.elasticsearch.common.io.Streams;
8183
import org.elasticsearch.common.lucene.uid.Versions;
8284
import org.elasticsearch.common.settings.Settings;
85+
import org.elasticsearch.common.unit.ByteSizeUnit;
8386
import org.elasticsearch.common.unit.TimeValue;
8487
import org.elasticsearch.common.xcontent.ToXContent;
8588
import org.elasticsearch.common.xcontent.XContentBuilder;
@@ -94,6 +97,7 @@
9497
import org.elasticsearch.index.rankeval.RankEvalSpec;
9598
import org.elasticsearch.index.rankeval.RatedRequest;
9699
import org.elasticsearch.index.rankeval.RestRankEvalAction;
100+
import org.elasticsearch.repositories.fs.FsRepository;
97101
import org.elasticsearch.rest.action.search.RestSearchAction;
98102
import org.elasticsearch.script.ScriptType;
99103
import org.elasticsearch.script.mustache.SearchTemplateRequest;
@@ -112,6 +116,7 @@
112116

113117
import java.io.IOException;
114118
import java.io.InputStream;
119+
import java.nio.file.Path;
115120
import java.util.ArrayList;
116121
import java.util.Arrays;
117122
import java.util.Collections;
@@ -1480,6 +1485,27 @@ public void testGetRepositories() {
14801485
assertThat(expectedParams, equalTo(request.getParameters()));
14811486
}
14821487

1488+
public void testCreateRepository() throws IOException {
1489+
String repository = "repo";
1490+
String endpoint = "/_snapshot/" + repository;
1491+
Path repositoryLocation = PathUtils.get(".");
1492+
PutRepositoryRequest putRepositoryRequest = new PutRepositoryRequest(repository);
1493+
putRepositoryRequest.type(FsRepository.TYPE);
1494+
putRepositoryRequest.verify(randomBoolean());
1495+
1496+
putRepositoryRequest.settings(
1497+
Settings.builder()
1498+
.put(FsRepository.LOCATION_SETTING.getKey(), repositoryLocation)
1499+
.put(FsRepository.COMPRESS_SETTING.getKey(), randomBoolean())
1500+
.put(FsRepository.CHUNK_SIZE_SETTING.getKey(), randomIntBetween(100, 1000), ByteSizeUnit.BYTES)
1501+
.build());
1502+
1503+
Request request = RequestConverters.createRepository(putRepositoryRequest);
1504+
assertThat(endpoint, equalTo(request.getEndpoint()));
1505+
assertThat(HttpPut.METHOD_NAME, equalTo(request.getMethod()));
1506+
assertToXContentBody(putRepositoryRequest, request.getEntity());
1507+
}
1508+
14831509
public void testPutTemplateRequest() throws Exception {
14841510
Map<String, String> names = new HashMap<>();
14851511
names.put("log", "log");

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

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -19,56 +19,56 @@
1919

2020
package org.elasticsearch.client;
2121

22-
import org.apache.http.entity.ContentType;
23-
import org.apache.http.entity.StringEntity;
2422
import org.elasticsearch.ElasticsearchException;
2523
import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesRequest;
2624
import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesResponse;
25+
import org.elasticsearch.action.admin.cluster.repositories.put.PutRepositoryRequest;
26+
import org.elasticsearch.action.admin.cluster.repositories.put.PutRepositoryResponse;
27+
import org.elasticsearch.common.xcontent.XContentType;
28+
import org.elasticsearch.repositories.fs.FsRepository;
2729
import org.elasticsearch.rest.RestStatus;
2830

2931
import java.io.IOException;
30-
import java.util.Collections;
3132

3233
import static org.hamcrest.Matchers.equalTo;
3334

3435
public class SnapshotIT extends ESRestHighLevelClientTestCase {
3536

36-
public void testModulesGetRepositoriesUsingParams() throws IOException {
37-
String repository = "test";
38-
String repositorySettings = "{\"type\":\"fs\", \"settings\":{\"location\": \".\"}}";
39-
highLevelClient().getLowLevelClient().performRequest("put", "_snapshot/" + repository, Collections.emptyMap(),
40-
new StringEntity(repositorySettings, ContentType.APPLICATION_JSON));
41-
42-
highLevelClient().getLowLevelClient().performRequest("put", "_snapshot/" + repository + "_other", Collections.emptyMap(),
43-
new StringEntity(repositorySettings, ContentType.APPLICATION_JSON));
37+
private PutRepositoryResponse createTestRepository(String repository, String type, String settings) throws IOException {
38+
PutRepositoryRequest request = new PutRepositoryRequest(repository);
39+
request.settings(settings, XContentType.JSON);
40+
request.type(type);
41+
return execute(request, highLevelClient().snapshot()::createRepository,
42+
highLevelClient().snapshot()::createRepositoryAsync);
4443

45-
{
46-
GetRepositoriesRequest request = new GetRepositoriesRequest();
47-
request.repositories(new String[]{repository});
48-
GetRepositoriesResponse response = execute(request, highLevelClient().snapshot()::getRepositories,
49-
highLevelClient().snapshot()::getRepositoriesAsync);
50-
assertThat(1, equalTo(response.repositories().size()));
51-
}
52-
{
53-
GetRepositoriesRequest request = new GetRepositoriesRequest();
54-
GetRepositoriesResponse response = execute(request, highLevelClient().snapshot()::getRepositories,
55-
highLevelClient().snapshot()::getRepositoriesAsync);
56-
assertThat(2, equalTo(response.repositories().size()));
57-
}
5844
}
5945

60-
public void testModulesGetDefaultRepositories() throws IOException {
61-
String repositorySettings = "{\"type\":\"fs\", \"settings\":{\"location\": \".\"}}";
62-
GetRepositoriesRequest request = new GetRepositoriesRequest();
46+
public void testCreateRepository() throws IOException {
47+
PutRepositoryResponse response = createTestRepository("test", FsRepository.TYPE, "{\"location\": \".\"}");
48+
assertTrue(response.isAcknowledged());
49+
}
6350

64-
highLevelClient().getLowLevelClient().performRequest("put", "_snapshot/test", Collections.emptyMap(),
65-
new StringEntity(repositorySettings, ContentType.APPLICATION_JSON));
51+
public void testModulesGetRepositoriesUsingParams() throws IOException {
52+
String testRepository = "test";
53+
assertTrue(createTestRepository(testRepository, FsRepository.TYPE, "{\"location\": \".\"}").isAcknowledged());
54+
assertTrue(createTestRepository("other", FsRepository.TYPE, "{\"location\": \".\"}").isAcknowledged());
6655

56+
GetRepositoriesRequest request = new GetRepositoriesRequest();
57+
request.repositories(new String[]{testRepository});
6758
GetRepositoriesResponse response = execute(request, highLevelClient().snapshot()::getRepositories,
6859
highLevelClient().snapshot()::getRepositoriesAsync);
6960
assertThat(1, equalTo(response.repositories().size()));
7061
}
7162

63+
public void testModulesGetDefaultRepositories() throws IOException {
64+
assertTrue(createTestRepository("other", FsRepository.TYPE, "{\"location\": \".\"}").isAcknowledged());
65+
assertTrue(createTestRepository("test", FsRepository.TYPE, "{\"location\": \".\"}").isAcknowledged());
66+
67+
GetRepositoriesResponse response = execute(new GetRepositoriesRequest(), highLevelClient().snapshot()::getRepositories,
68+
highLevelClient().snapshot()::getRepositoriesAsync);
69+
assertThat(2, equalTo(response.repositories().size()));
70+
}
71+
7272
public void testModulesGetRepositoriesNonExistent() throws IOException {
7373
String repository = "doesnotexist";
7474
GetRepositoriesRequest request = new GetRepositoriesRequest(new String[]{repository});

0 commit comments

Comments
 (0)