Skip to content

Commit 5cf038a

Browse files
committed
Change signature of Get Repositories Response (#30333)
The Get Repositories response object held a list of RepositoryMetaData entries. This object does not have the from/toXContent methods that are needed to expose this to the high level REST client. The RepositoriesMetaData, however, does, and it also contains a list of RepositoryMetaData objects within it. So rather than duplicate this logic or move it (RepositoriesMetaData is a fragment object used by cluster state), the object holding state in the Response was changed to use the RepositoriesMetaData instead. This also cleans up the read/write methods in the response, as they can now use the same read/write in RepositoriesMetaData, which also were not present in the singular class.
1 parent 9b01a40 commit 5cf038a

File tree

3 files changed

+21
-54
lines changed

3 files changed

+21
-54
lines changed

server/src/main/java/org/elasticsearch/action/admin/cluster/repositories/get/GetRepositoriesResponse.java

Lines changed: 15 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -20,29 +20,30 @@
2020
package org.elasticsearch.action.admin.cluster.repositories.get;
2121

2222
import org.elasticsearch.action.ActionResponse;
23+
import org.elasticsearch.cluster.metadata.RepositoriesMetaData;
2324
import org.elasticsearch.cluster.metadata.RepositoryMetaData;
2425
import org.elasticsearch.common.io.stream.StreamInput;
2526
import org.elasticsearch.common.io.stream.StreamOutput;
26-
import org.elasticsearch.common.settings.Settings;
27+
import org.elasticsearch.common.xcontent.ToXContentObject;
28+
import org.elasticsearch.common.xcontent.XContentBuilder;
2729

2830
import java.io.IOException;
29-
import java.util.ArrayList;
3031
import java.util.Collections;
3132
import java.util.Iterator;
3233
import java.util.List;
3334

3435
/**
3536
* Get repositories response
3637
*/
37-
public class GetRepositoriesResponse extends ActionResponse implements Iterable<RepositoryMetaData> {
38-
39-
private List<RepositoryMetaData> repositories = Collections.emptyList();
38+
public class GetRepositoriesResponse extends ActionResponse implements ToXContentObject {
4039

40+
private RepositoriesMetaData repositories;
4141

4242
GetRepositoriesResponse() {
43+
repositories = new RepositoriesMetaData(Collections.emptyList());
4344
}
4445

45-
GetRepositoriesResponse(List<RepositoryMetaData> repositories) {
46+
GetRepositoriesResponse(RepositoriesMetaData repositories) {
4647
this.repositories = repositories;
4748
}
4849

@@ -52,43 +53,25 @@ public class GetRepositoriesResponse extends ActionResponse implements Iterable<
5253
* @return list or repositories
5354
*/
5455
public List<RepositoryMetaData> repositories() {
55-
return repositories;
56+
return repositories.repositories();
5657
}
5758

5859

5960
@Override
6061
public void readFrom(StreamInput in) throws IOException {
61-
super.readFrom(in);
62-
int size = in.readVInt();
63-
List<RepositoryMetaData> repositoryListBuilder = new ArrayList<>(size);
64-
for (int j = 0; j < size; j++) {
65-
repositoryListBuilder.add(new RepositoryMetaData(
66-
in.readString(),
67-
in.readString(),
68-
Settings.readSettingsFromStream(in))
69-
);
70-
}
71-
repositories = Collections.unmodifiableList(repositoryListBuilder);
62+
repositories = new RepositoriesMetaData(in);
7263
}
7364

7465
@Override
7566
public void writeTo(StreamOutput out) throws IOException {
76-
super.writeTo(out);
77-
out.writeVInt(repositories.size());
78-
for (RepositoryMetaData repository : repositories) {
79-
out.writeString(repository.name());
80-
out.writeString(repository.type());
81-
Settings.writeSettingsToStream(repository.settings(), out);
82-
}
67+
repositories.writeTo(out);
8368
}
8469

85-
/**
86-
* Iterator over the repositories data
87-
*
88-
* @return iterator over the repositories data
89-
*/
9070
@Override
91-
public Iterator<RepositoryMetaData> iterator() {
92-
return repositories.iterator();
71+
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
72+
builder.startObject();
73+
repositories.toXContent(builder, params);
74+
builder.endObject();
75+
return builder;
9376
}
9477
}

server/src/main/java/org/elasticsearch/action/admin/cluster/repositories/get/TransportGetRepositoriesAction.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,9 @@ protected void masterOperation(final GetRepositoriesRequest request, ClusterStat
7575
RepositoriesMetaData repositories = metaData.custom(RepositoriesMetaData.TYPE);
7676
if (request.repositories().length == 0 || (request.repositories().length == 1 && "_all".equals(request.repositories()[0]))) {
7777
if (repositories != null) {
78-
listener.onResponse(new GetRepositoriesResponse(repositories.repositories()));
78+
listener.onResponse(new GetRepositoriesResponse(repositories));
7979
} else {
80-
listener.onResponse(new GetRepositoriesResponse(Collections.<RepositoryMetaData>emptyList()));
80+
listener.onResponse(new GetRepositoriesResponse(new RepositoriesMetaData(Collections.emptyList())));
8181
}
8282
} else {
8383
if (repositories != null) {
@@ -102,7 +102,7 @@ protected void masterOperation(final GetRepositoriesRequest request, ClusterStat
102102
}
103103
repositoryListBuilder.add(repositoryMetaData);
104104
}
105-
listener.onResponse(new GetRepositoriesResponse(Collections.unmodifiableList(repositoryListBuilder)));
105+
listener.onResponse(new GetRepositoriesResponse(new RepositoriesMetaData(repositoryListBuilder)));
106106
} else {
107107
listener.onFailure(new RepositoryMissingException(request.repositories()[0]));
108108
}

server/src/main/java/org/elasticsearch/rest/action/admin/cluster/RestGetRepositoriesAction.java

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,25 +22,19 @@
2222
import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesRequest;
2323
import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesResponse;
2424
import org.elasticsearch.client.node.NodeClient;
25-
import org.elasticsearch.cluster.metadata.RepositoriesMetaData;
26-
import org.elasticsearch.cluster.metadata.RepositoryMetaData;
2725
import org.elasticsearch.common.Strings;
2826
import org.elasticsearch.common.settings.Settings;
2927
import org.elasticsearch.common.settings.SettingsFilter;
30-
import org.elasticsearch.common.xcontent.XContentBuilder;
3128
import org.elasticsearch.rest.BaseRestHandler;
32-
import org.elasticsearch.rest.BytesRestResponse;
3329
import org.elasticsearch.rest.RestController;
3430
import org.elasticsearch.rest.RestRequest;
35-
import org.elasticsearch.rest.RestResponse;
36-
import org.elasticsearch.rest.action.RestBuilderListener;
31+
import org.elasticsearch.rest.action.RestToXContentListener;
3732

3833
import java.io.IOException;
3934
import java.util.Set;
4035

4136
import static org.elasticsearch.client.Requests.getRepositoryRequest;
4237
import static org.elasticsearch.rest.RestRequest.Method.GET;
43-
import static org.elasticsearch.rest.RestStatus.OK;
4438

4539
/**
4640
* Returns repository information
@@ -69,18 +63,8 @@ public RestChannelConsumer prepareRequest(final RestRequest request, final NodeC
6963
getRepositoriesRequest.local(request.paramAsBoolean("local", getRepositoriesRequest.local()));
7064
settingsFilter.addFilterSettingParams(request);
7165
return channel ->
72-
client.admin().cluster().getRepositories(getRepositoriesRequest, new RestBuilderListener<GetRepositoriesResponse>(channel) {
73-
@Override
74-
public RestResponse buildResponse(GetRepositoriesResponse response, XContentBuilder builder) throws Exception {
75-
builder.startObject();
76-
for (RepositoryMetaData repositoryMetaData : response.repositories()) {
77-
RepositoriesMetaData.toXContent(repositoryMetaData, builder, request);
78-
}
79-
builder.endObject();
80-
81-
return new BytesRestResponse(OK, builder);
82-
}
83-
});
66+
client.admin().cluster().getRepositories(getRepositoriesRequest,
67+
new RestToXContentListener<>(channel));
8468
}
8569

8670
@Override

0 commit comments

Comments
 (0)