Skip to content

Commit c8a9a49

Browse files
committed
rebase
Signed-off-by: Ruirui Zhang <[email protected]>
1 parent 58d33b2 commit c8a9a49

File tree

16 files changed

+231
-221
lines changed

16 files changed

+231
-221
lines changed

plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/WorkloadManagementPlugin.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.opensearch.action.ActionRequest;
1212
import org.opensearch.cluster.metadata.IndexNameExpressionResolver;
1313
import org.opensearch.cluster.node.DiscoveryNodes;
14+
import org.opensearch.common.inject.Module;
1415
import org.opensearch.common.settings.ClusterSettings;
1516
import org.opensearch.common.settings.IndexScopedSettings;
1617
import org.opensearch.common.settings.Setting;
@@ -21,11 +22,12 @@
2122
import org.opensearch.plugin.wlm.action.GetQueryGroupAction;
2223
import org.opensearch.plugin.wlm.action.TransportCreateQueryGroupAction;
2324
import org.opensearch.plugin.wlm.action.TransportGetQueryGroupAction;
25+
import org.opensearch.plugin.wlm.action.TransportUpdateQueryGroupAction;
26+
import org.opensearch.plugin.wlm.action.UpdateQueryGroupAction;
2427
import org.opensearch.plugin.wlm.rest.RestCreateQueryGroupAction;
2528
import org.opensearch.plugin.wlm.rest.RestGetQueryGroupAction;
26-
import org.opensearch.plugin.wlm.service.QueryGroupPersistenceService;
27-
import org.opensearch.common.inject.Module;
2829
import org.opensearch.plugin.wlm.rest.RestUpdateQueryGroupAction;
30+
import org.opensearch.plugin.wlm.service.QueryGroupPersistenceService;
2931
import org.opensearch.plugins.ActionPlugin;
3032
import org.opensearch.plugins.Plugin;
3133
import org.opensearch.rest.RestController;

plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/WorkloadManagementPluginModule.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,8 @@
88

99
package org.opensearch.plugin.wlm;
1010

11-
import org.opensearch.cluster.metadata.QueryGroup;
1211
import org.opensearch.common.inject.AbstractModule;
13-
import org.opensearch.common.inject.TypeLiteral;
14-
import org.opensearch.plugin.wlm.service.Persistable;
12+
import org.opensearch.common.inject.Singleton;
1513
import org.opensearch.plugin.wlm.service.QueryGroupPersistenceService;
1614

1715
/**
@@ -26,7 +24,6 @@ public WorkloadManagementPluginModule() {}
2624

2725
@Override
2826
protected void configure() {
29-
bind(new TypeLiteral<Persistable<QueryGroup>>() {
30-
}).to(QueryGroupPersistenceService.class).asEagerSingleton();
27+
bind(QueryGroupPersistenceService.class).in(Singleton.class);
3128
}
3229
}
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,26 @@
66
* compatible open source license.
77
*/
88

9-
package org.opensearch.plugin.wlm;
9+
package org.opensearch.plugin.wlm.action;
1010

1111
import org.opensearch.action.support.ActionFilters;
1212
import org.opensearch.action.support.HandledTransportAction;
13-
import org.opensearch.cluster.metadata.QueryGroup;
1413
import org.opensearch.common.inject.Inject;
1514
import org.opensearch.core.action.ActionListener;
16-
import org.opensearch.plugin.wlm.service.Persistable;
15+
import org.opensearch.plugin.wlm.service.QueryGroupPersistenceService;
1716
import org.opensearch.tasks.Task;
1817
import org.opensearch.threadpool.ThreadPool;
1918
import org.opensearch.transport.TransportService;
2019

2120
/**
22-
* Transport action for update QueryGroup
21+
* Transport action to update QueryGroup
2322
*
24-
* @opensearch.internal
23+
* @opensearch.experimental
2524
*/
2625
public class TransportUpdateQueryGroupAction extends HandledTransportAction<UpdateQueryGroupRequest, UpdateQueryGroupResponse> {
2726

2827
private final ThreadPool threadPool;
29-
private final Persistable<QueryGroup> queryGroupPersistenceService;
28+
private final QueryGroupPersistenceService queryGroupPersistenceService;
3029

3130
/**
3231
* Constructor for TransportUpdateQueryGroupAction
@@ -35,15 +34,15 @@ public class TransportUpdateQueryGroupAction extends HandledTransportAction<Upda
3534
* @param transportService - a {@link TransportService} object
3635
* @param actionFilters - a {@link ActionFilters} object
3736
* @param threadPool - a {@link ThreadPool} object
38-
* @param queryGroupPersistenceService - a {@link Persistable} object
37+
* @param queryGroupPersistenceService - a {@link QueryGroupPersistenceService} object
3938
*/
4039
@Inject
4140
public TransportUpdateQueryGroupAction(
4241
String actionName,
4342
TransportService transportService,
4443
ActionFilters actionFilters,
4544
ThreadPool threadPool,
46-
Persistable<QueryGroup> queryGroupPersistenceService
45+
QueryGroupPersistenceService queryGroupPersistenceService
4746
) {
4847
super(UpdateQueryGroupAction.NAME, transportService, actionFilters, UpdateQueryGroupRequest::new);
4948
this.threadPool = threadPool;
@@ -52,6 +51,7 @@ public TransportUpdateQueryGroupAction(
5251

5352
@Override
5453
protected void doExecute(Task task, UpdateQueryGroupRequest request, ActionListener<UpdateQueryGroupResponse> listener) {
55-
threadPool.executor(ThreadPool.Names.GENERIC).execute(() -> queryGroupPersistenceService.update(request, listener));
54+
threadPool.executor(ThreadPool.Names.GENERIC)
55+
.execute(() -> queryGroupPersistenceService.updateInClusterStateMetadata(request, listener));
5656
}
5757
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@
66
* compatible open source license.
77
*/
88

9-
package org.opensearch.plugin.wlm;
9+
package org.opensearch.plugin.wlm.action;
1010

1111
import org.opensearch.action.ActionType;
1212

1313
/**
1414
* Transport action to update QueryGroup
1515
*
16-
* @opensearch.api
16+
* @opensearch.experimental
1717
*/
1818
public class UpdateQueryGroupAction extends ActionType<UpdateQueryGroupResponse> {
1919

Lines changed: 17 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,14 @@
66
* compatible open source license.
77
*/
88

9-
package org.opensearch.plugin.wlm;
9+
package org.opensearch.plugin.wlm.action;
1010

1111
import org.opensearch.action.ActionRequest;
1212
import org.opensearch.action.ActionRequestValidationException;
1313
import org.opensearch.cluster.metadata.QueryGroup;
1414
import org.opensearch.cluster.metadata.QueryGroup.ResiliencyMode;
1515
import org.opensearch.core.common.io.stream.StreamInput;
1616
import org.opensearch.core.common.io.stream.StreamOutput;
17-
import org.opensearch.core.common.io.stream.Writeable;
1817
import org.opensearch.core.xcontent.XContentParser;
1918
import org.opensearch.search.ResourceType;
2019
import org.joda.time.Instant;
@@ -26,18 +25,13 @@
2625
/**
2726
* A request for update QueryGroup
2827
*
29-
* @opensearch.internal
28+
* @opensearch.experimental
3029
*/
31-
public class UpdateQueryGroupRequest extends ActionRequest implements Writeable.Reader<UpdateQueryGroupRequest> {
32-
String name;
33-
Map<ResourceType, Double> resourceLimits;
34-
private ResiliencyMode resiliencyMode;
35-
long updatedAtInMillis;
36-
37-
/**
38-
* Default constructor for UpdateQueryGroupRequest
39-
*/
40-
public UpdateQueryGroupRequest() {}
30+
public class UpdateQueryGroupRequest extends ActionRequest {
31+
private final String name;
32+
private final Map<ResourceType, Double> resourceLimits;
33+
private final ResiliencyMode resiliencyMode;
34+
private final long updatedAtInMillis;
4135

4236
/**
4337
* Constructor for UpdateQueryGroupRequest
@@ -83,64 +77,29 @@ public UpdateQueryGroupRequest(StreamInput in) throws IOException {
8377
}
8478
if (in.readBoolean()) {
8579
resiliencyMode = ResiliencyMode.fromName(in.readString());
80+
} else {
81+
resiliencyMode = null;
8682
}
8783
updatedAtInMillis = in.readLong();
8884
}
8985

90-
@Override
91-
public UpdateQueryGroupRequest read(StreamInput in) throws IOException {
92-
return new UpdateQueryGroupRequest(in);
93-
}
94-
9586
/**
9687
* Generate a UpdateQueryGroupRequest from XContent
9788
* @param parser - A {@link XContentParser} object
9889
* @param name - name of the QueryGroup to be updated
9990
*/
10091
public static UpdateQueryGroupRequest fromXContent(XContentParser parser, String name) throws IOException {
101-
while (parser.currentToken() != XContentParser.Token.START_OBJECT) {
102-
parser.nextToken();
103-
}
104-
105-
if (parser.currentToken() != XContentParser.Token.START_OBJECT) {
106-
throw new IllegalArgumentException("expected start object but got a " + parser.currentToken());
107-
}
108-
109-
XContentParser.Token token;
110-
String fieldName = "";
111-
ResiliencyMode mode = null;
112-
113-
// Map to hold resources
114-
final Map<ResourceType, Double> resourceLimits = new HashMap<>();
115-
while ((token = parser.nextToken()) != null) {
116-
if (token == XContentParser.Token.FIELD_NAME) {
117-
fieldName = parser.currentName();
118-
} else if (token.isValue()) {
119-
if (fieldName.equals("resiliency_mode")) {
120-
mode = ResiliencyMode.fromName(parser.text());
121-
} else {
122-
throw new IllegalArgumentException("unrecognised [field=" + fieldName + " in QueryGroup");
123-
}
124-
} else if (token == XContentParser.Token.START_OBJECT) {
125-
if (!fieldName.equals("resourceLimits")) {
126-
throw new IllegalArgumentException(
127-
"QueryGroup.resourceLimits is an object and expected token was { " + " but found " + token
128-
);
129-
}
130-
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
131-
if (token == XContentParser.Token.FIELD_NAME) {
132-
fieldName = parser.currentName();
133-
} else {
134-
resourceLimits.put(ResourceType.fromName(fieldName), parser.doubleValue());
135-
}
136-
}
137-
}
138-
}
139-
return new UpdateQueryGroupRequest(name, mode, resourceLimits, Instant.now().getMillis());
92+
QueryGroup.Builder builder = QueryGroup.Builder.fromXContent(parser);
93+
return new UpdateQueryGroupRequest(name, builder.getResiliencyMode(), builder.getResourceLimits(), Instant.now().getMillis());
14094
}
14195

14296
@Override
14397
public ActionRequestValidationException validate() {
98+
QueryGroup.validateName(name);
99+
if (resourceLimits != null) {
100+
QueryGroup.validateResourceLimits(resourceLimits);
101+
}
102+
assert QueryGroup.isValid(updatedAtInMillis);
144103
return null;
145104
}
146105

@@ -151,59 +110,27 @@ public String getName() {
151110
return name;
152111
}
153112

154-
/**
155-
* name setter
156-
* @param name - name to be set
157-
*/
158-
public void setName(String name) {
159-
this.name = name;
160-
}
161-
162113
/**
163114
* ResourceLimits getter
164115
*/
165116
public Map<ResourceType, Double> getResourceLimits() {
166117
return resourceLimits;
167118
}
168119

169-
/**
170-
* ResourceLimits setter
171-
* @param resourceLimits - ResourceLimit to be set
172-
*/
173-
public void setResourceLimits(Map<ResourceType, Double> resourceLimits) {
174-
this.resourceLimits = resourceLimits;
175-
}
176-
177120
/**
178121
* resiliencyMode getter
179122
*/
180123
public ResiliencyMode getResiliencyMode() {
181124
return resiliencyMode;
182125
}
183126

184-
/**
185-
* resiliencyMode setter
186-
* @param resiliencyMode - mode to be set
187-
*/
188-
public void setResiliencyMode(ResiliencyMode resiliencyMode) {
189-
this.resiliencyMode = resiliencyMode;
190-
}
191-
192127
/**
193128
* updatedAtInMillis getter
194129
*/
195130
public long getUpdatedAtInMillis() {
196131
return updatedAtInMillis;
197132
}
198133

199-
/**
200-
* updatedAtInMillis setter
201-
* @param updatedAtInMillis - updatedAtInMillis to be set
202-
*/
203-
public void setUpdatedAtInMillis(long updatedAtInMillis) {
204-
this.updatedAtInMillis = updatedAtInMillis;
205-
}
206-
207134
@Override
208135
public void writeTo(StreamOutput out) throws IOException {
209136
super.writeTo(out);
@@ -212,7 +139,7 @@ public void writeTo(StreamOutput out) throws IOException {
212139
out.writeBoolean(false);
213140
} else {
214141
out.writeBoolean(true);
215-
out.writeMap(resourceLimits, ResourceType::writeTo, StreamOutput::writeGenericValue);
142+
out.writeMap(resourceLimits, ResourceType::writeTo, StreamOutput::writeDouble);
216143
}
217144
if (resiliencyMode == null) {
218145
out.writeBoolean(false);
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* compatible open source license.
77
*/
88

9-
package org.opensearch.plugin.wlm;
9+
package org.opensearch.plugin.wlm.action;
1010

1111
import org.opensearch.cluster.metadata.QueryGroup;
1212
import org.opensearch.core.action.ActionResponse;
@@ -22,7 +22,7 @@
2222
/**
2323
* Response for the update API for QueryGroup
2424
*
25-
* @opensearch.internal
25+
* @opensearch.experimental
2626
*/
2727
public class UpdateQueryGroupResponse extends ActionResponse implements ToXContent, ToXContentObject {
2828
private final QueryGroup queryGroup;

plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/rest/RestGetQueryGroupAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import static org.opensearch.rest.RestRequest.Method.GET;
2828

2929
/**
30-
* Rest action to get a QueryGroup0
30+
* Rest action to get a QueryGroup
3131
*
3232
* @opensearch.experimental
3333
*/

plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/rest/RestUpdateQueryGroupAction.java

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
import org.opensearch.core.rest.RestStatus;
1313
import org.opensearch.core.xcontent.ToXContent;
1414
import org.opensearch.core.xcontent.XContentParser;
15-
import org.opensearch.plugin.wlm.UpdateQueryGroupAction;
16-
import org.opensearch.plugin.wlm.UpdateQueryGroupRequest;
17-
import org.opensearch.plugin.wlm.UpdateQueryGroupResponse;
15+
import org.opensearch.plugin.wlm.action.UpdateQueryGroupAction;
16+
import org.opensearch.plugin.wlm.action.UpdateQueryGroupRequest;
17+
import org.opensearch.plugin.wlm.action.UpdateQueryGroupResponse;
1818
import org.opensearch.rest.BaseRestHandler;
1919
import org.opensearch.rest.BytesRestResponse;
2020
import org.opensearch.rest.RestChannel;
@@ -31,7 +31,7 @@
3131
/**
3232
* Rest action to update a QueryGroup
3333
*
34-
* @opensearch.api
34+
* @opensearch.experimental
3535
*/
3636
public class RestUpdateQueryGroupAction extends BaseRestHandler {
3737

@@ -50,23 +50,15 @@ public String getName() {
5050
*/
5151
@Override
5252
public List<Route> routes() {
53-
return List.of(new Route(POST, "_query_group/{name}"), new Route(PUT, "_query_group/{name}"));
53+
return List.of(new Route(POST, "_wlm/query_group/{name}"), new Route(PUT, "_wlm/query_group/{name}"));
5454
}
5555

5656
@Override
5757
protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException {
58-
String name = request.param("name");
59-
UpdateQueryGroupRequest updateQueryGroupRequest = new UpdateQueryGroupRequest();
60-
request.applyContentParser((parser) -> parseRestRequest(updateQueryGroupRequest, parser, name));
61-
return channel -> client.execute(UpdateQueryGroupAction.INSTANCE, updateQueryGroupRequest, updateQueryGroupResponse(channel));
62-
}
63-
64-
private void parseRestRequest(UpdateQueryGroupRequest request, XContentParser parser, String name) throws IOException {
65-
final UpdateQueryGroupRequest updateQueryGroupRequest = UpdateQueryGroupRequest.fromXContent(parser, name);
66-
request.setName(updateQueryGroupRequest.getName());
67-
request.setResourceLimits(updateQueryGroupRequest.getResourceLimits());
68-
request.setResiliencyMode(updateQueryGroupRequest.getResiliencyMode());
69-
request.setUpdatedAtInMillis(updateQueryGroupRequest.getUpdatedAtInMillis());
58+
try (XContentParser parser = request.contentParser()) {
59+
UpdateQueryGroupRequest updateQueryGroupRequest = UpdateQueryGroupRequest.fromXContent(parser, request.param("name"));
60+
return channel -> client.execute(UpdateQueryGroupAction.INSTANCE, updateQueryGroupRequest, updateQueryGroupResponse(channel));
61+
}
7062
}
7163

7264
private RestResponseListener<UpdateQueryGroupResponse> updateQueryGroupResponse(final RestChannel channel) {

0 commit comments

Comments
 (0)