From 5b539342fe6b9dfc2830b40bdbbba20af5977e80 Mon Sep 17 00:00:00 2001 From: Ruirui Zhang Date: Wed, 19 Jun 2024 11:45:03 -0700 Subject: [PATCH] seperate PR to only include create API Signed-off-by: Ruirui Zhang --- .../plugin/wlm/CreateQueryGroupResponse.java | 8 - .../plugin/wlm/DeleteQueryGroupAction.java | 37 --- .../plugin/wlm/DeleteQueryGroupRequest.java | 74 ----- .../plugin/wlm/DeleteQueryGroupResponse.java | 95 ------- .../plugin/wlm/GetQueryGroupAction.java | 37 --- .../plugin/wlm/GetQueryGroupRequest.java | 74 ----- .../plugin/wlm/GetQueryGroupResponse.java | 95 ------- .../wlm/TransportDeleteQueryGroupAction.java | 58 ---- .../wlm/TransportGetQueryGroupAction.java | 58 ---- .../wlm/TransportUpdateQueryGroupAction.java | 57 ---- .../plugin/wlm/UpdateQueryGroupAction.java | 36 --- .../plugin/wlm/UpdateQueryGroupRequest.java | 268 ------------------ .../plugin/wlm/UpdateQueryGroupResponse.java | 87 ------ .../plugin/wlm/WorkloadManagementPlugin.java | 17 +- .../wlm/rest/RestDeleteQueryGroupAction.java | 69 ----- .../wlm/rest/RestGetQueryGroupAction.java | 69 ----- .../wlm/rest/RestUpdateQueryGroupAction.java | 80 ------ .../plugin/wlm/service/Persistable.java | 25 -- .../service/QueryGroupPersistenceService.java | 190 ------------- .../wlm/DeleteQueryGroupRequestTests.java | 38 --- .../wlm/DeleteQueryGroupResponseTests.java | 68 ----- .../plugin/wlm/GetQueryGroupRequestTests.java | 38 --- .../wlm/GetQueryGroupResponseTests.java | 65 ----- .../wlm/UpdateQueryGroupRequestTests.java | 119 -------- .../wlm/UpdateQueryGroupResponseTests.java | 33 --- .../QueryGroupPersistenceServiceTests.java | 119 -------- 26 files changed, 2 insertions(+), 1912 deletions(-) delete mode 100644 plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/DeleteQueryGroupAction.java delete mode 100644 plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/DeleteQueryGroupRequest.java delete mode 100644 plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/DeleteQueryGroupResponse.java delete mode 100644 plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/GetQueryGroupAction.java delete mode 100644 plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/GetQueryGroupRequest.java delete mode 100644 plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/GetQueryGroupResponse.java delete mode 100644 plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/TransportDeleteQueryGroupAction.java delete mode 100644 plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/TransportGetQueryGroupAction.java delete mode 100644 plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/TransportUpdateQueryGroupAction.java delete mode 100644 plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/UpdateQueryGroupAction.java delete mode 100644 plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/UpdateQueryGroupRequest.java delete mode 100644 plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/UpdateQueryGroupResponse.java delete mode 100644 plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/rest/RestDeleteQueryGroupAction.java delete mode 100644 plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/rest/RestGetQueryGroupAction.java delete mode 100644 plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/rest/RestUpdateQueryGroupAction.java delete mode 100644 plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/DeleteQueryGroupRequestTests.java delete mode 100644 plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/DeleteQueryGroupResponseTests.java delete mode 100644 plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/GetQueryGroupRequestTests.java delete mode 100644 plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/GetQueryGroupResponseTests.java delete mode 100644 plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/UpdateQueryGroupRequestTests.java delete mode 100644 plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/UpdateQueryGroupResponseTests.java diff --git a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/CreateQueryGroupResponse.java b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/CreateQueryGroupResponse.java index 5e70084f0f0e1..ea112f95f1097 100644 --- a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/CreateQueryGroupResponse.java +++ b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/CreateQueryGroupResponse.java @@ -77,12 +77,4 @@ public QueryGroup getQueryGroup() { public RestStatus getRestStatus() { return restStatus; } - - /** - * restStatus setter - * @param restStatus - A {@link RestStatus} object - */ - public void setRestStatus(RestStatus restStatus) { - this.restStatus = restStatus; - } } diff --git a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/DeleteQueryGroupAction.java b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/DeleteQueryGroupAction.java deleted file mode 100644 index 207f8ae8ee5c1..0000000000000 --- a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/DeleteQueryGroupAction.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -package org.opensearch.plugin.wlm; - -import org.opensearch.action.ActionType; - -/** - * Rest action to delete QueryGroup - * - * @opensearch.api - */ -public class DeleteQueryGroupAction extends ActionType { - - /** - /** - * An instance of DeleteQueryGroupAction - */ - public static final DeleteQueryGroupAction INSTANCE = new DeleteQueryGroupAction(); - - /** - * Name for DeleteQueryGroupAction - */ - public static final String NAME = "cluster:admin/opensearch/query_group/wlm/_delete"; - - /** - * Default constructor - */ - private DeleteQueryGroupAction() { - super(NAME, DeleteQueryGroupResponse::new); - } -} diff --git a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/DeleteQueryGroupRequest.java b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/DeleteQueryGroupRequest.java deleted file mode 100644 index 3d05a33bc1808..0000000000000 --- a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/DeleteQueryGroupRequest.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -package org.opensearch.plugin.wlm; - -import org.opensearch.action.ActionRequest; -import org.opensearch.action.ActionRequestValidationException; -import org.opensearch.core.common.io.stream.StreamInput; -import org.opensearch.core.common.io.stream.StreamOutput; -import org.opensearch.core.common.io.stream.Writeable; - -import java.io.IOException; - -/** - * A request for delete QueryGroup - * - * @opensearch.internal - */ -public class DeleteQueryGroupRequest extends ActionRequest implements Writeable.Reader { - String name; - - /** - * Default constructor for DeleteQueryGroupRequest - * @param name - name for the QueryGroup to get - */ - public DeleteQueryGroupRequest(String name) { - this.name = name; - } - - /** - * Constructor for DeleteQueryGroupRequest - * @param in - A {@link StreamInput} object - */ - public DeleteQueryGroupRequest(StreamInput in) throws IOException { - super(in); - name = in.readOptionalString(); - } - - @Override - public DeleteQueryGroupRequest read(StreamInput in) throws IOException { - return new DeleteQueryGroupRequest(in); - } - - @Override - public ActionRequestValidationException validate() { - return null; - } - - /** - * Name getter - */ - public String getName() { - return name; - } - - /** - * Name setter - * @param name - name to be set - */ - public void setName(String name) { - this.name = name; - } - - @Override - public void writeTo(StreamOutput out) throws IOException { - super.writeTo(out); - out.writeOptionalString(name); - } -} diff --git a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/DeleteQueryGroupResponse.java b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/DeleteQueryGroupResponse.java deleted file mode 100644 index 0c1258df338a9..0000000000000 --- a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/DeleteQueryGroupResponse.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -package org.opensearch.plugin.wlm; - -import org.opensearch.cluster.metadata.QueryGroup; -import org.opensearch.core.action.ActionResponse; -import org.opensearch.core.common.io.stream.StreamInput; -import org.opensearch.core.common.io.stream.StreamOutput; -import org.opensearch.core.rest.RestStatus; -import org.opensearch.core.xcontent.ToXContent; -import org.opensearch.core.xcontent.ToXContentObject; -import org.opensearch.core.xcontent.XContentBuilder; - -import java.io.IOException; -import java.util.List; - -/** - * Response for the delete API for QueryGroup - * - * @opensearch.internal - */ -public class DeleteQueryGroupResponse extends ActionResponse implements ToXContent, ToXContentObject { - private final List queryGroups; - private RestStatus restStatus; - - /** - * Constructor for DeleteQueryGroupResponse - * @param queryGroups - The QueryGroup list to be fetched - * @param restStatus - The rest status for this response - */ - public DeleteQueryGroupResponse(final List queryGroups, RestStatus restStatus) { - this.queryGroups = queryGroups; - this.restStatus = restStatus; - } - - /** - * Constructor for DeleteQueryGroupResponse - * @param in - A {@link StreamInput} object - */ - public DeleteQueryGroupResponse(StreamInput in) throws IOException { - this.queryGroups = in.readList(QueryGroup::new); - this.restStatus = RestStatus.readFrom(in); - } - - @Override - public void writeTo(StreamOutput out) throws IOException { - out.writeList(queryGroups); - RestStatus.writeTo(out, restStatus); - } - - @Override - public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { - builder.startObject(); - builder.startArray("deleted"); - for (QueryGroup group : queryGroups) { - builder.startObject(); - builder.field("name", group.getName()); - builder.field("mode", group.getMode().getName()); - builder.field("updatedAt", group.getUpdatedAtInMillis()); - builder.mapContents(group.getResourceLimits()); - builder.endObject(); - } - builder.endArray(); - builder.endObject(); - return builder; - } - - /** - * queryGroups getter - */ - public List getQueryGroups() { - return queryGroups; - } - - /** - * restStatus getter - */ - public RestStatus getRestStatus() { - return restStatus; - } - - /** - * restStatus setter - * @param restStatus - A {@link RestStatus} object - */ - public void setRestStatus(RestStatus restStatus) { - this.restStatus = restStatus; - } -} diff --git a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/GetQueryGroupAction.java b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/GetQueryGroupAction.java deleted file mode 100644 index 1c507ded8337a..0000000000000 --- a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/GetQueryGroupAction.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -package org.opensearch.plugin.wlm; - -import org.opensearch.action.ActionType; - -/** - * Rest action to get QueryGroup - * - * @opensearch.api - */ -public class GetQueryGroupAction extends ActionType { - - /** - /** - * An instance of GetQueryGroupAction - */ - public static final GetQueryGroupAction INSTANCE = new GetQueryGroupAction(); - - /** - * Name for GetQueryGroupAction - */ - public static final String NAME = "cluster:admin/opensearch/query_group/wlm/_get"; - - /** - * Default constructor - */ - private GetQueryGroupAction() { - super(NAME, GetQueryGroupResponse::new); - } -} diff --git a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/GetQueryGroupRequest.java b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/GetQueryGroupRequest.java deleted file mode 100644 index 62df9c9ac2fbb..0000000000000 --- a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/GetQueryGroupRequest.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -package org.opensearch.plugin.wlm; - -import org.opensearch.action.ActionRequest; -import org.opensearch.action.ActionRequestValidationException; -import org.opensearch.core.common.io.stream.StreamInput; -import org.opensearch.core.common.io.stream.StreamOutput; -import org.opensearch.core.common.io.stream.Writeable; - -import java.io.IOException; - -/** - * A request for get QueryGroup - * - * @opensearch.internal - */ -public class GetQueryGroupRequest extends ActionRequest implements Writeable.Reader { - String name; - - /** - * Default constructor for GetQueryGroupRequest - * @param name - name for the QueryGroup to get - */ - public GetQueryGroupRequest(String name) { - this.name = name; - } - - /** - * Constructor for GetQueryGroupRequest - * @param in - A {@link StreamInput} object - */ - public GetQueryGroupRequest(StreamInput in) throws IOException { - super(in); - name = in.readOptionalString(); - } - - @Override - public GetQueryGroupRequest read(StreamInput in) throws IOException { - return new GetQueryGroupRequest(in); - } - - @Override - public ActionRequestValidationException validate() { - return null; - } - - /** - * Name getter - */ - public String getName() { - return name; - } - - /** - * Name setter - * @param name - name to be set - */ - public void setName(String name) { - this.name = name; - } - - @Override - public void writeTo(StreamOutput out) throws IOException { - super.writeTo(out); - out.writeOptionalString(name); - } -} diff --git a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/GetQueryGroupResponse.java b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/GetQueryGroupResponse.java deleted file mode 100644 index e68a1a7f58184..0000000000000 --- a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/GetQueryGroupResponse.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -package org.opensearch.plugin.wlm; - -import org.opensearch.cluster.metadata.QueryGroup; -import org.opensearch.core.action.ActionResponse; -import org.opensearch.core.common.io.stream.StreamInput; -import org.opensearch.core.common.io.stream.StreamOutput; -import org.opensearch.core.rest.RestStatus; -import org.opensearch.core.xcontent.ToXContent; -import org.opensearch.core.xcontent.ToXContentObject; -import org.opensearch.core.xcontent.XContentBuilder; - -import java.io.IOException; -import java.util.List; - -/** - * Response for the get API for QueryGroup - * - * @opensearch.internal - */ -public class GetQueryGroupResponse extends ActionResponse implements ToXContent, ToXContentObject { - private final List queryGroups; - private RestStatus restStatus; - - /** - * Constructor for GetQueryGroupResponse - * @param queryGroups - The QueryGroup list to be fetched - * @param restStatus - The rest status of the request - */ - public GetQueryGroupResponse(final List queryGroups, RestStatus restStatus) { - this.queryGroups = queryGroups; - this.restStatus = restStatus; - } - - /** - * Constructor for GetQueryGroupResponse - * @param in - A {@link StreamInput} object - */ - public GetQueryGroupResponse(StreamInput in) throws IOException { - this.queryGroups = in.readList(QueryGroup::new); - restStatus = RestStatus.readFrom(in); - } - - @Override - public void writeTo(StreamOutput out) throws IOException { - out.writeList(queryGroups); - RestStatus.writeTo(out, restStatus); - } - - @Override - public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { - builder.startObject(); - builder.startArray("query_groups"); - for (QueryGroup group : queryGroups) { - builder.startObject(); - builder.field("name", group.getName()); - builder.field("mode", group.getMode().getName()); - builder.field("updatedAt", group.getUpdatedAtInMillis()); - builder.mapContents(group.getResourceLimits()); - builder.endObject(); - } - builder.endArray(); - builder.endObject(); - return builder; - } - - /** - * queryGroups getter - */ - public List getQueryGroups() { - return queryGroups; - } - - /** - * restStatus getter - */ - public RestStatus getRestStatus() { - return restStatus; - } - - /** - * restStatus setter - * @param restStatus - A {@link RestStatus} object - */ - public void setRestStatus(RestStatus restStatus) { - this.restStatus = restStatus; - } -} diff --git a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/TransportDeleteQueryGroupAction.java b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/TransportDeleteQueryGroupAction.java deleted file mode 100644 index 41bb84a7aea7f..0000000000000 --- a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/TransportDeleteQueryGroupAction.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -package org.opensearch.plugin.wlm; - -import org.opensearch.action.support.ActionFilters; -import org.opensearch.action.support.HandledTransportAction; -import org.opensearch.cluster.metadata.QueryGroup; -import org.opensearch.common.inject.Inject; -import org.opensearch.core.action.ActionListener; -import org.opensearch.plugin.wlm.service.Persistable; -import org.opensearch.tasks.Task; -import org.opensearch.threadpool.ThreadPool; -import org.opensearch.transport.TransportService; - -/** - * Transport action for delete QueryGroup - * - * @opensearch.internal - */ -public class TransportDeleteQueryGroupAction extends HandledTransportAction { - - private final ThreadPool threadPool; - private final Persistable queryGroupPersistenceService; - - /** - * Constructor for TransportDeleteQueryGroupAction - * - * @param actionName - action name - * @param transportService - a {@link TransportService} object - * @param actionFilters - a {@link ActionFilters} object - * @param threadPool - a {@link ThreadPool} object - * @param queryGroupPersistenceService - a {@link Persistable} object - */ - @Inject - public TransportDeleteQueryGroupAction( - String actionName, - TransportService transportService, - ActionFilters actionFilters, - ThreadPool threadPool, - Persistable queryGroupPersistenceService - ) { - super(DeleteQueryGroupAction.NAME, transportService, actionFilters, DeleteQueryGroupRequest::new); - this.threadPool = threadPool; - this.queryGroupPersistenceService = queryGroupPersistenceService; - } - - @Override - protected void doExecute(Task task, DeleteQueryGroupRequest request, ActionListener listener) { - String name = request.getName(); - threadPool.executor(ThreadPool.Names.GENERIC).execute(() -> queryGroupPersistenceService.delete(name, listener)); - } -} diff --git a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/TransportGetQueryGroupAction.java b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/TransportGetQueryGroupAction.java deleted file mode 100644 index 8c353faddc122..0000000000000 --- a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/TransportGetQueryGroupAction.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -package org.opensearch.plugin.wlm; - -import org.opensearch.action.support.ActionFilters; -import org.opensearch.action.support.HandledTransportAction; -import org.opensearch.cluster.metadata.QueryGroup; -import org.opensearch.common.inject.Inject; -import org.opensearch.core.action.ActionListener; -import org.opensearch.plugin.wlm.service.Persistable; -import org.opensearch.tasks.Task; -import org.opensearch.threadpool.ThreadPool; -import org.opensearch.transport.TransportService; - -/** - * Transport action for get QueryGroup - * - * @opensearch.internal - */ -public class TransportGetQueryGroupAction extends HandledTransportAction { - - private final ThreadPool threadPool; - private final Persistable queryGroupPersistenceService; - - /** - * Constructor for TransportGetQueryGroupAction - * - * @param actionName - action name - * @param transportService - a {@link TransportService} object - * @param actionFilters - a {@link ActionFilters} object - * @param threadPool - a {@link ThreadPool} object - * @param queryGroupPersistenceService - a {@link Persistable} object - */ - @Inject - public TransportGetQueryGroupAction( - String actionName, - TransportService transportService, - ActionFilters actionFilters, - ThreadPool threadPool, - Persistable queryGroupPersistenceService - ) { - super(GetQueryGroupAction.NAME, transportService, actionFilters, GetQueryGroupRequest::new); - this.threadPool = threadPool; - this.queryGroupPersistenceService = queryGroupPersistenceService; - } - - @Override - protected void doExecute(Task task, GetQueryGroupRequest request, ActionListener listener) { - String name = request.getName(); - threadPool.executor(ThreadPool.Names.GENERIC).execute(() -> queryGroupPersistenceService.get(name, listener)); - } -} diff --git a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/TransportUpdateQueryGroupAction.java b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/TransportUpdateQueryGroupAction.java deleted file mode 100644 index 0e560718ced62..0000000000000 --- a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/TransportUpdateQueryGroupAction.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -package org.opensearch.plugin.wlm; - -import org.opensearch.action.support.ActionFilters; -import org.opensearch.action.support.HandledTransportAction; -import org.opensearch.cluster.metadata.QueryGroup; -import org.opensearch.common.inject.Inject; -import org.opensearch.core.action.ActionListener; -import org.opensearch.plugin.wlm.service.Persistable; -import org.opensearch.tasks.Task; -import org.opensearch.threadpool.ThreadPool; -import org.opensearch.transport.TransportService; - -/** - * Transport action for update QueryGroup - * - * @opensearch.internal - */ -public class TransportUpdateQueryGroupAction extends HandledTransportAction { - - private final ThreadPool threadPool; - private final Persistable queryGroupPersistenceService; - - /** - * Constructor for TransportUpdateQueryGroupAction - * - * @param actionName - action name - * @param transportService - a {@link TransportService} object - * @param actionFilters - a {@link ActionFilters} object - * @param threadPool - a {@link ThreadPool} object - * @param queryGroupPersistenceService - a {@link Persistable} object - */ - @Inject - public TransportUpdateQueryGroupAction( - String actionName, - TransportService transportService, - ActionFilters actionFilters, - ThreadPool threadPool, - Persistable queryGroupPersistenceService - ) { - super(UpdateQueryGroupAction.NAME, transportService, actionFilters, UpdateQueryGroupRequest::new); - this.threadPool = threadPool; - this.queryGroupPersistenceService = queryGroupPersistenceService; - } - - @Override - protected void doExecute(Task task, UpdateQueryGroupRequest request, ActionListener listener) { - threadPool.executor(ThreadPool.Names.GENERIC).execute(() -> queryGroupPersistenceService.update(request, listener)); - } -} diff --git a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/UpdateQueryGroupAction.java b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/UpdateQueryGroupAction.java deleted file mode 100644 index b9f00e1ba70a8..0000000000000 --- a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/UpdateQueryGroupAction.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -package org.opensearch.plugin.wlm; - -import org.opensearch.action.ActionType; - -/** - * Rest action to update QueryGroup - * - * @opensearch.api - */ -public class UpdateQueryGroupAction extends ActionType { - - /** - * An instance of UpdateQueryGroupAction - */ - public static final UpdateQueryGroupAction INSTANCE = new UpdateQueryGroupAction(); - - /** - * Name for UpdateQueryGroupAction - */ - public static final String NAME = "cluster:admin/opensearch/query_group/wlm/_update"; - - /** - * Default constructor - */ - private UpdateQueryGroupAction() { - super(NAME, UpdateQueryGroupResponse::new); - } -} diff --git a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/UpdateQueryGroupRequest.java b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/UpdateQueryGroupRequest.java deleted file mode 100644 index c29cdc524e899..0000000000000 --- a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/UpdateQueryGroupRequest.java +++ /dev/null @@ -1,268 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -package org.opensearch.plugin.wlm; - -import org.opensearch.action.ActionRequest; -import org.opensearch.action.ActionRequestValidationException; -import org.opensearch.cluster.metadata.QueryGroup; -import org.opensearch.cluster.metadata.QueryGroup.QueryGroupMode; -import org.opensearch.core.common.io.stream.StreamInput; -import org.opensearch.core.common.io.stream.StreamOutput; -import org.opensearch.core.common.io.stream.Writeable; -import org.opensearch.core.xcontent.XContentParser; -import org.joda.time.Instant; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; -import java.util.Objects; - -import static org.opensearch.cluster.metadata.QueryGroup.ALLOWED_RESOURCES; -import static org.opensearch.plugin.wlm.CreateQueryGroupRequest.validateName; -import static org.opensearch.plugin.wlm.CreateQueryGroupRequest.validateMode; -import static org.opensearch.plugin.wlm.CreateQueryGroupRequest.validateUpdatedAtInMillis; - -/** - * A request for update QueryGroup - * - * @opensearch.internal - */ -public class UpdateQueryGroupRequest extends ActionRequest implements Writeable.Reader { - String name; - Map resourceLimits; - QueryGroupMode mode; - long updatedAtInMillis; - - /** - * Default constructor for UpdateQueryGroupRequest - */ - public UpdateQueryGroupRequest() {} - - /** - * Constructor for UpdateQueryGroupRequest - * @param queryGroup - A {@link QueryGroup} object - */ - public UpdateQueryGroupRequest(QueryGroup queryGroup) { - this.name = queryGroup.getName(); - this.mode = queryGroup.getMode(); - this.resourceLimits = queryGroup.getResourceLimits(); - this.updatedAtInMillis = queryGroup.getUpdatedAtInMillis(); - verifyUpdateQueryGroupRequest(name, mode, resourceLimits, updatedAtInMillis); - } - - /** - * Constructor for UpdateQueryGroupRequest - * @param name - QueryGroup name for UpdateQueryGroupRequest - * @param mode - QueryGroup mode for UpdateQueryGroupRequest - * @param resourceLimits - QueryGroup resourceLimits for UpdateQueryGroupRequest - * @param updatedAtInMillis - QueryGroup updated time in millis for UpdateQueryGroupRequest - */ - public UpdateQueryGroupRequest(String name, QueryGroupMode mode, Map resourceLimits, long updatedAtInMillis) { - this.name = name; - this.mode = mode; - this.resourceLimits = resourceLimits; - this.updatedAtInMillis = updatedAtInMillis; - verifyUpdateQueryGroupRequest(name, mode, resourceLimits, updatedAtInMillis); - } - - /** - * Constructor for UpdateQueryGroupRequest - * @param in - A {@link StreamInput} object - */ - public UpdateQueryGroupRequest(StreamInput in) throws IOException { - super(in); - name = in.readString(); - if (in.readBoolean()) { - resourceLimits = in.readMap(); - } else { - resourceLimits = new HashMap<>(); - } - if (in.readBoolean()) { - mode = QueryGroupMode.fromName(in.readString()); - } - updatedAtInMillis = in.readLong(); - verifyUpdateQueryGroupRequest(name, mode, resourceLimits, updatedAtInMillis); - } - - /** - * Verification for UpdateQueryGroupRequest - * @param name - QueryGroup name for UpdateQueryGroupRequest - * @param resourceLimits - QueryGroup resourceLimits for UpdateQueryGroupRequest - * @param updatedAtInMillis - QueryGroup updated time in millis for UpdateQueryGroupRequest - */ - private void verifyUpdateQueryGroupRequest( - String name, - QueryGroupMode mode, - Map resourceLimits, - long updatedAtInMillis - ) { - Objects.requireNonNull(name, "QueryGroup.name can't be null"); - Objects.requireNonNull(resourceLimits, "QueryGroup.resourceLimits can't be null"); - Objects.requireNonNull(updatedAtInMillis, "QueryGroup.updatedAtInMillis can't be null"); - - validateName(name); - validateMode(mode); - validateResourceLimits(resourceLimits); - validateUpdatedAtInMillis(updatedAtInMillis); - } - - /** - * Verification for resourceLimits - * @param resourceLimits - QueryGroup resourceLimits for UpdateQueryGroupRequest - */ - public static void validateResourceLimits(Map resourceLimits) { - if (resourceLimits == null) return; - for (Map.Entry resource : resourceLimits.entrySet()) { - String resourceName = resource.getKey(); - Double threshold = (Double) resource.getValue(); - Objects.requireNonNull(resourceName, "resourceName can't be null"); - Objects.requireNonNull(threshold, "resource value can't be null"); - - if (threshold < 0 || threshold > 1) { - throw new IllegalArgumentException("Resource value should be between 0 and 1"); - } - String str = String.valueOf(threshold); - if (str.contains(".") && str.split("\\.")[1].length() > 2) { - throw new IllegalArgumentException("Resource value should have at most two digits after the decimal point"); - } - if (!ALLOWED_RESOURCES.contains(resourceName.toLowerCase(Locale.ROOT))) { - throw new IllegalArgumentException( - "resource has to be valid, valid resources are: " + ALLOWED_RESOURCES.stream().reduce((x, e) -> x + ", " + e).get() - ); - } - } - } - - @Override - public UpdateQueryGroupRequest read(StreamInput in) throws IOException { - return new UpdateQueryGroupRequest(in); - } - - /** - * Generate a UpdateQueryGroupRequest from XContent - * @param parser - A {@link XContentParser} object - * @param name - name of the QueryGroup to be updated - */ - public static UpdateQueryGroupRequest fromXContent(XContentParser parser, String name) throws IOException { - while (parser.currentToken() != XContentParser.Token.START_OBJECT) { - parser.nextToken(); - } - - if (parser.currentToken() != XContentParser.Token.START_OBJECT) { - throw new IllegalArgumentException("expected start object but got a " + parser.currentToken()); - } - - XContentParser.Token token; - String fieldName = ""; - QueryGroupMode mode = null; - long updatedAtInMillis = Instant.now().getMillis(); - - // Map to hold resources - final Map resourceLimits_ = new HashMap<>(); - while ((token = parser.nextToken()) != null) { - if (token == XContentParser.Token.FIELD_NAME) { - fieldName = parser.currentName(); - } else if (token.isValue()) { - if (fieldName.equals("mode")) { - mode = QueryGroupMode.fromName(parser.text()); - } else if (ALLOWED_RESOURCES.contains(fieldName)) { - resourceLimits_.put(fieldName, parser.doubleValue()); - } else { - throw new IllegalArgumentException("unrecognised [field=" + fieldName + " in QueryGroup"); - } - } - } - return new UpdateQueryGroupRequest(name, mode, resourceLimits_, updatedAtInMillis); - } - - @Override - public ActionRequestValidationException validate() { - return null; - } - - /** - * name getter - */ - public String getName() { - return name; - } - - /** - * name setter - * @param name - name to be set - */ - public void setName(String name) { - this.name = name; - } - - /** - * ResourceLimits getter - */ - public Map getResourceLimits() { - return resourceLimits; - } - - /** - * ResourceLimits setter - * @param resourceLimits - ResourceLimit to be set - */ - public void setResourceLimits(Map resourceLimits) { - this.resourceLimits = resourceLimits; - } - - /** - * Mode getter - */ - public QueryGroupMode getMode() { - return mode; - } - - /** - * Mode setter - * @param mode - mode to be set - */ - public void setMode(QueryGroupMode mode) { - this.mode = mode; - } - - /** - * updatedAtInMillis getter - */ - public long getUpdatedAtInMillis() { - return updatedAtInMillis; - } - - /** - * updatedAtInMillis setter - * @param updatedAtInMillis - updatedAtInMillis to be set - */ - public void setUpdatedAtInMillis(long updatedAtInMillis) { - this.updatedAtInMillis = updatedAtInMillis; - } - - @Override - public void writeTo(StreamOutput out) throws IOException { - super.writeTo(out); - out.writeString(name); - if (resourceLimits == null || resourceLimits.isEmpty()) { - out.writeBoolean(false); - } else { - out.writeBoolean(true); - out.writeMap(resourceLimits); - } - if (mode == null) { - out.writeBoolean(false); - } else { - out.writeBoolean(true); - out.writeString(mode.getName()); - } - out.writeLong(updatedAtInMillis); - } -} diff --git a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/UpdateQueryGroupResponse.java b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/UpdateQueryGroupResponse.java deleted file mode 100644 index 761a5cc187147..0000000000000 --- a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/UpdateQueryGroupResponse.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -package org.opensearch.plugin.wlm; - -import org.opensearch.cluster.metadata.QueryGroup; -import org.opensearch.core.action.ActionResponse; -import org.opensearch.core.common.io.stream.StreamInput; -import org.opensearch.core.common.io.stream.StreamOutput; -import org.opensearch.core.rest.RestStatus; -import org.opensearch.core.xcontent.ToXContent; -import org.opensearch.core.xcontent.ToXContentObject; -import org.opensearch.core.xcontent.XContentBuilder; - -import java.io.IOException; - -/** - * Response for the update API for QueryGroup - * - * @opensearch.internal - */ -public class UpdateQueryGroupResponse extends ActionResponse implements ToXContent, ToXContentObject { - private final QueryGroup queryGroup; - private RestStatus restStatus; - - /** - * Constructor for UpdateQueryGroupResponse - * @param queryGroup - The QueryGroup to be updated - */ - public UpdateQueryGroupResponse(final QueryGroup queryGroup, RestStatus restStatus) { - this.queryGroup = queryGroup; - this.restStatus = restStatus; - } - - /** - * Constructor for UpdateQueryGroupResponse - * @param in - A {@link StreamInput} object - */ - public UpdateQueryGroupResponse(StreamInput in) throws IOException { - queryGroup = new QueryGroup(in); - restStatus = RestStatus.readFrom(in); - } - - @Override - public void writeTo(StreamOutput out) throws IOException { - queryGroup.writeTo(out); - RestStatus.writeTo(out, restStatus); - } - - @Override - public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { - builder.startObject(); - builder.field("name", queryGroup.getName()); - builder.field("mode", queryGroup.getMode().getName()); - builder.field("updatedAt", queryGroup.getUpdatedAtInMillis()); - builder.mapContents(queryGroup.getResourceLimits()); - builder.endObject(); - return builder; - } - - /** - * queryGroup getter - */ - public QueryGroup getQueryGroup() { - return queryGroup; - } - - /** - * restStatus getter - */ - public RestStatus getRestStatus() { - return restStatus; - } - - /** - * restStatus setter - * @param restStatus - A {@link RestStatus} object - */ - public void setRestStatus(RestStatus restStatus) { - this.restStatus = restStatus; - } -} diff --git a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/WorkloadManagementPlugin.java b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/WorkloadManagementPlugin.java index e08027a741ac5..065c2f3229d15 100644 --- a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/WorkloadManagementPlugin.java +++ b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/WorkloadManagementPlugin.java @@ -18,9 +18,6 @@ import org.opensearch.common.settings.SettingsFilter; import org.opensearch.core.action.ActionResponse; import org.opensearch.plugin.wlm.rest.RestCreateQueryGroupAction; -import org.opensearch.plugin.wlm.rest.RestDeleteQueryGroupAction; -import org.opensearch.plugin.wlm.rest.RestGetQueryGroupAction; -import org.opensearch.plugin.wlm.rest.RestUpdateQueryGroupAction; import org.opensearch.plugins.ActionPlugin; import org.opensearch.plugins.Plugin; import org.opensearch.rest.RestController; @@ -42,12 +39,7 @@ public WorkloadManagementPlugin() {} @Override public List> getActions() { - return List.of( - new ActionPlugin.ActionHandler<>(CreateQueryGroupAction.INSTANCE, TransportCreateQueryGroupAction.class), - new ActionPlugin.ActionHandler<>(GetQueryGroupAction.INSTANCE, TransportGetQueryGroupAction.class), - new ActionPlugin.ActionHandler<>(UpdateQueryGroupAction.INSTANCE, TransportUpdateQueryGroupAction.class), - new ActionPlugin.ActionHandler<>(DeleteQueryGroupAction.INSTANCE, TransportDeleteQueryGroupAction.class) - ); + return List.of(new ActionPlugin.ActionHandler<>(CreateQueryGroupAction.INSTANCE, TransportCreateQueryGroupAction.class)); } @Override @@ -60,12 +52,7 @@ public List getRestHandlers( IndexNameExpressionResolver indexNameExpressionResolver, Supplier nodesInCluster ) { - return List.of( - new RestCreateQueryGroupAction(), - new RestGetQueryGroupAction(), - new RestUpdateQueryGroupAction(), - new RestDeleteQueryGroupAction() - ); + return List.of(new RestCreateQueryGroupAction()); } @Override diff --git a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/rest/RestDeleteQueryGroupAction.java b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/rest/RestDeleteQueryGroupAction.java deleted file mode 100644 index e577defdfea13..0000000000000 --- a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/rest/RestDeleteQueryGroupAction.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -package org.opensearch.plugin.wlm.rest; - -import org.opensearch.client.node.NodeClient; -import org.opensearch.core.rest.RestStatus; -import org.opensearch.core.xcontent.ToXContent; -import org.opensearch.plugin.wlm.DeleteQueryGroupAction; -import org.opensearch.plugin.wlm.DeleteQueryGroupRequest; -import org.opensearch.plugin.wlm.DeleteQueryGroupResponse; -import org.opensearch.rest.BaseRestHandler; -import org.opensearch.rest.BytesRestResponse; -import org.opensearch.rest.RestChannel; -import org.opensearch.rest.RestRequest; -import org.opensearch.rest.RestResponse; -import org.opensearch.rest.action.RestResponseListener; - -import java.io.IOException; -import java.util.List; - -import static org.opensearch.rest.RestRequest.Method.DELETE; - -/** - * Rest action to delete a QueryGroup - * - * @opensearch.api - */ -public class RestDeleteQueryGroupAction extends BaseRestHandler { - - /** - * Constructor for RestDeleteQueryGroupAction - */ - public RestDeleteQueryGroupAction() {} - - @Override - public String getName() { - return "delete_query_group"; - } - - /** - * The list of {@link Route}s that this RestHandler is responsible for handling. - */ - @Override - public List routes() { - return List.of(new Route(DELETE, "_query_group/{name}"), new Route(DELETE, "_query_group/")); - } - - @Override - protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException { - String name = request.param("name"); - DeleteQueryGroupRequest deleteQueryGroupRequest = new DeleteQueryGroupRequest(name); - return channel -> client.execute(DeleteQueryGroupAction.INSTANCE, deleteQueryGroupRequest, deleteQueryGroupResponse(channel)); - } - - private RestResponseListener deleteQueryGroupResponse(final RestChannel channel) { - return new RestResponseListener<>(channel) { - @Override - public RestResponse buildResponse(final DeleteQueryGroupResponse response) throws Exception { - return new BytesRestResponse(RestStatus.OK, response.toXContent(channel.newBuilder(), ToXContent.EMPTY_PARAMS)); - } - }; - } -} diff --git a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/rest/RestGetQueryGroupAction.java b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/rest/RestGetQueryGroupAction.java deleted file mode 100644 index 1e1b3f4eff72e..0000000000000 --- a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/rest/RestGetQueryGroupAction.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -package org.opensearch.plugin.wlm.rest; - -import org.opensearch.client.node.NodeClient; -import org.opensearch.core.rest.RestStatus; -import org.opensearch.core.xcontent.ToXContent; -import org.opensearch.plugin.wlm.GetQueryGroupAction; -import org.opensearch.plugin.wlm.GetQueryGroupRequest; -import org.opensearch.plugin.wlm.GetQueryGroupResponse; -import org.opensearch.rest.BaseRestHandler; -import org.opensearch.rest.BytesRestResponse; -import org.opensearch.rest.RestChannel; -import org.opensearch.rest.RestRequest; -import org.opensearch.rest.RestResponse; -import org.opensearch.rest.action.RestResponseListener; - -import java.io.IOException; -import java.util.List; - -import static org.opensearch.rest.RestRequest.Method.GET; - -/** - * Rest action to get a QueryGroup0 - * - * @opensearch.api - */ -public class RestGetQueryGroupAction extends BaseRestHandler { - - /** - * Constructor for RestGetQueryGroupAction - */ - public RestGetQueryGroupAction() {} - - @Override - public String getName() { - return "get_query_group"; - } - - /** - * The list of {@link Route}s that this RestHandler is responsible for handling. - */ - @Override - public List routes() { - return List.of(new Route(GET, "_query_group/{name}"), new Route(GET, "_query_group/")); - } - - @Override - protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException { - String name = request.param("name"); - GetQueryGroupRequest getQueryGroupRequest = new GetQueryGroupRequest(name); - return channel -> client.execute(GetQueryGroupAction.INSTANCE, getQueryGroupRequest, getQueryGroupResponse(channel)); - } - - private RestResponseListener getQueryGroupResponse(final RestChannel channel) { - return new RestResponseListener<>(channel) { - @Override - public RestResponse buildResponse(final GetQueryGroupResponse response) throws Exception { - return new BytesRestResponse(RestStatus.OK, response.toXContent(channel.newBuilder(), ToXContent.EMPTY_PARAMS)); - } - }; - } -} diff --git a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/rest/RestUpdateQueryGroupAction.java b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/rest/RestUpdateQueryGroupAction.java deleted file mode 100644 index a369f9fe9edea..0000000000000 --- a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/rest/RestUpdateQueryGroupAction.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -package org.opensearch.plugin.wlm.rest; - -import org.opensearch.client.node.NodeClient; -import org.opensearch.core.rest.RestStatus; -import org.opensearch.core.xcontent.ToXContent; -import org.opensearch.core.xcontent.XContentParser; -import org.opensearch.plugin.wlm.UpdateQueryGroupAction; -import org.opensearch.plugin.wlm.UpdateQueryGroupRequest; -import org.opensearch.plugin.wlm.UpdateQueryGroupResponse; -import org.opensearch.rest.BaseRestHandler; -import org.opensearch.rest.BytesRestResponse; -import org.opensearch.rest.RestChannel; -import org.opensearch.rest.RestRequest; -import org.opensearch.rest.RestResponse; -import org.opensearch.rest.action.RestResponseListener; - -import java.io.IOException; -import java.util.List; - -import static org.opensearch.rest.RestRequest.Method.POST; -import static org.opensearch.rest.RestRequest.Method.PUT; - -/** - * Rest action to update a QueryGroup - * - * @opensearch.api - */ -public class RestUpdateQueryGroupAction extends BaseRestHandler { - - /** - * Constructor for RestUpdateQueryGroupAction - */ - public RestUpdateQueryGroupAction() {} - - @Override - public String getName() { - return "update_query_group"; - } - - /** - * The list of {@link Route}s that this RestHandler is responsible for handling. - */ - @Override - public List routes() { - return List.of(new Route(POST, "_query_group/{name}"), new Route(PUT, "_query_group/{name}")); - } - - @Override - protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException { - String name = request.param("name"); - UpdateQueryGroupRequest updateQueryGroupRequest = new UpdateQueryGroupRequest(); - request.applyContentParser((parser) -> parseRestRequest(updateQueryGroupRequest, parser, name)); - return channel -> client.execute(UpdateQueryGroupAction.INSTANCE, updateQueryGroupRequest, updateQueryGroupResponse(channel)); - } - - private void parseRestRequest(UpdateQueryGroupRequest request, XContentParser parser, String name) throws IOException { - final UpdateQueryGroupRequest updateQueryGroupRequest = UpdateQueryGroupRequest.fromXContent(parser, name); - request.setName(updateQueryGroupRequest.getName()); - request.setResourceLimits(updateQueryGroupRequest.getResourceLimits()); - request.setMode(updateQueryGroupRequest.getMode()); - request.setUpdatedAtInMillis(updateQueryGroupRequest.getUpdatedAtInMillis()); - } - - private RestResponseListener updateQueryGroupResponse(final RestChannel channel) { - return new RestResponseListener<>(channel) { - @Override - public RestResponse buildResponse(final UpdateQueryGroupResponse response) throws Exception { - return new BytesRestResponse(RestStatus.OK, response.toXContent(channel.newBuilder(), ToXContent.EMPTY_PARAMS)); - } - }; - } -} diff --git a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/service/Persistable.java b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/service/Persistable.java index dc2cb5de2f9cd..37a6b4a58bc17 100644 --- a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/service/Persistable.java +++ b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/service/Persistable.java @@ -10,10 +10,6 @@ import org.opensearch.core.action.ActionListener; import org.opensearch.plugin.wlm.CreateQueryGroupResponse; -import org.opensearch.plugin.wlm.DeleteQueryGroupResponse; -import org.opensearch.plugin.wlm.GetQueryGroupResponse; -import org.opensearch.plugin.wlm.UpdateQueryGroupRequest; -import org.opensearch.plugin.wlm.UpdateQueryGroupResponse; /** * This interface defines the key APIs for implementing QueruGroup persistence @@ -26,25 +22,4 @@ public interface Persistable { * @param listener */ void persist(T queryGroup, ActionListener listener); - - /** - * update the QueryGroup in a durable storage - * @param updateQueryGroupRequest - * @param listener - */ - void update(UpdateQueryGroupRequest updateQueryGroupRequest, ActionListener listener); - - /** - * fetch the QueryGroup in a durable storage - * @param name - * @param listener - */ - void get(String name, ActionListener listener); - - /** - * delete the QueryGroup in a durable storage - * @param name - * @param listener - */ - void delete(String name, ActionListener listener); } diff --git a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/service/QueryGroupPersistenceService.java b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/service/QueryGroupPersistenceService.java index f88aad0a8f8f5..768dfcdd22fa1 100644 --- a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/service/QueryGroupPersistenceService.java +++ b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/service/QueryGroupPersistenceService.java @@ -14,7 +14,6 @@ import org.opensearch.cluster.ClusterStateUpdateTask; import org.opensearch.cluster.metadata.Metadata; import org.opensearch.cluster.metadata.QueryGroup; -import org.opensearch.cluster.metadata.QueryGroup.QueryGroupMode; import org.opensearch.cluster.service.ClusterManagerTaskThrottler.ThrottlingKey; import org.opensearch.cluster.service.ClusterService; import org.opensearch.common.Priority; @@ -24,14 +23,9 @@ import org.opensearch.core.action.ActionListener; import org.opensearch.core.rest.RestStatus; import org.opensearch.plugin.wlm.CreateQueryGroupResponse; -import org.opensearch.plugin.wlm.DeleteQueryGroupResponse; -import org.opensearch.plugin.wlm.GetQueryGroupResponse; -import org.opensearch.plugin.wlm.UpdateQueryGroupRequest; -import org.opensearch.plugin.wlm.UpdateQueryGroupResponse; import java.util.ArrayList; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Optional; @@ -98,30 +92,6 @@ public void persist(QueryGroup queryGroup, ActionListener listener) { - updateInClusterStateMetadata(updateQueryGroupRequest, listener); - } - - @Override - public void get(String name, ActionListener listener) { - ClusterState currentState = clusterService.state(); - List resultGroups = getFromClusterStateMetadata(name, currentState); - if (resultGroups.isEmpty() && name != null && !name.isEmpty()) { - logger.warn("No QueryGroup exists with the provided name: {}", name); - Exception e = new RuntimeException("No QueryGroup exists with the provided name: " + name); - listener.onFailure(e); - return; - } - GetQueryGroupResponse response = new GetQueryGroupResponse(resultGroups, RestStatus.OK); - listener.onResponse(response); - } - - @Override - public void delete(String name, ActionListener listener) { - deleteInClusterStateMetadata(name, listener); - } - /** * Update cluster state to include the new QueryGroup * @param queryGroup {@link QueryGroup} - the QueryGroup we're currently creating @@ -237,166 +207,6 @@ private double calculateExistingUsage(String resourceName, Set group return existingUsage; } - /** - * Modify cluster state to update the QueryGroup - * @param toUpdateGroup {@link QueryGroup} - the QueryGroup that we want to update - */ - void updateInClusterStateMetadata(UpdateQueryGroupRequest toUpdateGroup, ActionListener listener) { - clusterService.submitStateUpdateTask(SOURCE, new ClusterStateUpdateTask(Priority.URGENT) { - @Override - public ClusterState execute(ClusterState currentState) { - return updateQueryGroupInClusterState(toUpdateGroup, currentState); - } - - @Override - public ThrottlingKey getClusterManagerThrottlingKey() { - return updateQueryGroupThrottlingKey; - } - - @Override - public void onFailure(String source, Exception e) { - restoreInflightValues(toUpdateGroup.getResourceLimits()); - logger.warn("Failed to update QueryGroup due to error: {}, for source: {}", e.getMessage(), source); - listener.onFailure(e); - } - - @Override - public void clusterStateProcessed(String source, ClusterState oldState, ClusterState newState) { - restoreInflightValues(toUpdateGroup.getResourceLimits()); - String name = toUpdateGroup.getName(); - Optional findUpdatedGroup = newState.metadata() - .queryGroups() - .stream() - .filter(group -> group.getName().equals(name)) - .findFirst(); - assert findUpdatedGroup.isPresent(); - QueryGroup updatedGroup = findUpdatedGroup.get(); - UpdateQueryGroupResponse response = new UpdateQueryGroupResponse(updatedGroup, RestStatus.OK); - listener.onResponse(response); - } - }); - } - - /** - * Modify cluster state to update the existing QueryGroup - * @param updateQueryGroupRequest {@link QueryGroup} - the QueryGroup that we want to update - * @param currentState - current cluster state - */ - public ClusterState updateQueryGroupInClusterState(UpdateQueryGroupRequest updateQueryGroupRequest, ClusterState currentState) { - final Metadata metadata = currentState.metadata(); - Set existingGroups = currentState.metadata().queryGroups(); - String name = updateQueryGroupRequest.getName(); - String resourceNameWithThresholdExceeded = ""; - - // check if there's any resource allocation that exceed limit of 1.0 - if (updateQueryGroupRequest.getResourceLimits() != null) { - for (String resourceName : updateQueryGroupRequest.getResourceLimits().keySet()) { - double existingUsage = calculateExistingUsage(resourceName, existingGroups, name); - double newGroupUsage = getResourceLimitValue(resourceName, updateQueryGroupRequest.getResourceLimits()); - inflightResourceLimitValues.computeIfAbsent(resourceName, k -> new DoubleAdder()).add(newGroupUsage); - double totalUsage = existingUsage + inflightResourceLimitValues.get(resourceName).doubleValue(); - if (totalUsage > 1) { - resourceNameWithThresholdExceeded = resourceName; - } - } - } - - Optional findExistingGroup = existingGroups.stream().filter(group -> group.getName().equals(name)).findFirst(); - - if (findExistingGroup.isEmpty()) { - logger.warn("No QueryGroup exists with the provided name: {}", name); - throw new RuntimeException("No QueryGroup exists with the provided name: " + name); - } - if (!resourceNameWithThresholdExceeded.isEmpty()) { - logger.error("Total resource allocation for {} will go above the max limit of 1.0", resourceNameWithThresholdExceeded); - throw new RuntimeException( - "Total resource allocation for " + resourceNameWithThresholdExceeded + " will go above the max limit of 1.0" - ); - } - - // build the QueryGroup with updated fields - QueryGroup existingGroup = findExistingGroup.get(); - String _id = existingGroup.get_id(); - long updatedAtInMillis = updateQueryGroupRequest.getUpdatedAtInMillis(); - Map existingResourceLimits = existingGroup.getResourceLimits(); - Map updatedResourceLimits = new HashMap<>(); - if (existingResourceLimits != null) { - updatedResourceLimits.putAll(existingResourceLimits); - } - if (updateQueryGroupRequest.getResourceLimits() != null) { - updatedResourceLimits.putAll(updateQueryGroupRequest.getResourceLimits()); - } - QueryGroupMode mode = updateQueryGroupRequest.getMode() == null ? existingGroup.getMode() : updateQueryGroupRequest.getMode(); - - QueryGroup updatedGroup = new QueryGroup(name, _id, mode, updatedResourceLimits, updatedAtInMillis); - return ClusterState.builder(currentState) - .metadata(Metadata.builder(metadata).remove(existingGroup).put(updatedGroup).build()) - .build(); - } - - /** - * Modify cluster state to delete the QueryGroup - * @param name - the name for QueryGroup to be deleted - */ - void deleteInClusterStateMetadata(String name, ActionListener listener) { - clusterService.submitStateUpdateTask(SOURCE, new ClusterStateUpdateTask(Priority.URGENT) { - @Override - public ClusterState execute(ClusterState currentState) throws Exception { - return deleteQueryGroupInClusterState(name, currentState); - } - - @Override - public ThrottlingKey getClusterManagerThrottlingKey() { - return deleteQueryGroupThrottlingKey; - } - - @Override - public void onFailure(String source, Exception e) { - logger.warn("Failed to delete QueryGroup due to error: {}, for source: {}", e.getMessage(), source); - listener.onFailure(e); - } - - @Override - public void clusterStateProcessed(String source, ClusterState oldState, ClusterState newState) { - final Set oldGroupsMap = oldState.metadata().queryGroups(); - final Set newGroupsMap = newState.metadata().queryGroups(); - List deletedGroups = new ArrayList<>(); - for (QueryGroup group : oldGroupsMap) { - if (!newGroupsMap.contains(group)) { - deletedGroups.add(group); - } - } - DeleteQueryGroupResponse response = new DeleteQueryGroupResponse(deletedGroups, RestStatus.OK); - listener.onResponse(response); - } - }); - } - - /** - * Modify cluster state to delete the QueryGroup - * @param name - the name for QueryGroup to be deleted - * @param currentClusterState - current cluster state - */ - ClusterState deleteQueryGroupInClusterState(final String name, final ClusterState currentClusterState) { - final Metadata metadata = currentClusterState.metadata(); - final Set previousGroups = metadata.queryGroups(); - - if (name == null || name.isEmpty()) { // delete all - return ClusterState.builder(currentClusterState) - .metadata(Metadata.builder(metadata).queryGroups(new HashSet<>()).build()) - .build(); - } else { - Optional findExistingGroup = previousGroups.stream().filter(group -> group.getName().equals(name)).findFirst(); - if (findExistingGroup.isEmpty()) { - logger.error("The QueryGroup with provided name {} doesn't exist", name); - throw new RuntimeException("No QueryGroup exists with the provided name: " + name); - } - return ClusterState.builder(currentClusterState) - .metadata(Metadata.builder(metadata).remove(findExistingGroup.get()).build()) - .build(); - } - } - List getFromClusterStateMetadata(String name, ClusterState currentState) { Set currentGroups = currentState.getMetadata().queryGroups(); List resultGroups = new ArrayList<>(); diff --git a/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/DeleteQueryGroupRequestTests.java b/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/DeleteQueryGroupRequestTests.java deleted file mode 100644 index ae78f2bae9d2f..0000000000000 --- a/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/DeleteQueryGroupRequestTests.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -package org.opensearch.plugin.wlm; - -import org.opensearch.common.io.stream.BytesStreamOutput; -import org.opensearch.core.common.io.stream.StreamInput; -import org.opensearch.test.OpenSearchTestCase; - -import java.io.IOException; - -public class DeleteQueryGroupRequestTests extends OpenSearchTestCase { - - public void testSerialization() throws IOException { - DeleteQueryGroupRequest request = new DeleteQueryGroupRequest(QueryGroupTestUtils.NAME_ONE); - assertEquals(QueryGroupTestUtils.NAME_ONE, request.getName()); - BytesStreamOutput out = new BytesStreamOutput(); - request.writeTo(out); - StreamInput streamInput = out.bytes().streamInput(); - DeleteQueryGroupRequest otherRequest = new DeleteQueryGroupRequest(streamInput); - assertEquals(request.getName(), otherRequest.getName()); - } - - public void testSerializationWithNull() throws IOException { - DeleteQueryGroupRequest request = new DeleteQueryGroupRequest((String) null); - assertNull(request.getName()); - BytesStreamOutput out = new BytesStreamOutput(); - request.writeTo(out); - StreamInput streamInput = out.bytes().streamInput(); - DeleteQueryGroupRequest otherRequest = new DeleteQueryGroupRequest(streamInput); - assertEquals(request.getName(), otherRequest.getName()); - } -} diff --git a/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/DeleteQueryGroupResponseTests.java b/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/DeleteQueryGroupResponseTests.java deleted file mode 100644 index af3cb7ea356ea..0000000000000 --- a/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/DeleteQueryGroupResponseTests.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -package org.opensearch.plugin.wlm; - -import org.opensearch.cluster.metadata.QueryGroup; -import org.opensearch.common.io.stream.BytesStreamOutput; -import org.opensearch.core.common.io.stream.StreamInput; -import org.opensearch.core.rest.RestStatus; -import org.opensearch.test.OpenSearchTestCase; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import static org.opensearch.plugin.wlm.QueryGroupTestUtils.compareQueryGroups; -import static org.opensearch.plugin.wlm.QueryGroupTestUtils.queryGroupList; -import static org.opensearch.plugin.wlm.QueryGroupTestUtils.queryGroupOne; - -public class DeleteQueryGroupResponseTests extends OpenSearchTestCase { - - public void testSerializationSingleQueryGroup() throws IOException { - List list = List.of(queryGroupOne); - DeleteQueryGroupResponse response = new DeleteQueryGroupResponse(list, RestStatus.OK); - assertEquals(response.getQueryGroups(), list); - - BytesStreamOutput out = new BytesStreamOutput(); - response.writeTo(out); - StreamInput streamInput = out.bytes().streamInput(); - - DeleteQueryGroupResponse otherResponse = new DeleteQueryGroupResponse(streamInput); - assertEquals(response.getRestStatus(), otherResponse.getRestStatus()); - compareQueryGroups(response.getQueryGroups(), otherResponse.getQueryGroups()); - } - - public void testSerializationMultipleQueryGroup() throws IOException { - DeleteQueryGroupResponse response = new DeleteQueryGroupResponse(queryGroupList(), RestStatus.OK); - assertEquals(response.getQueryGroups(), queryGroupList()); - - BytesStreamOutput out = new BytesStreamOutput(); - response.writeTo(out); - StreamInput streamInput = out.bytes().streamInput(); - - DeleteQueryGroupResponse otherResponse = new DeleteQueryGroupResponse(streamInput); - assertEquals(response.getRestStatus(), otherResponse.getRestStatus()); - assertEquals(2, otherResponse.getQueryGroups().size()); - compareQueryGroups(response.getQueryGroups(), otherResponse.getQueryGroups()); - } - - public void testSerializationNull() throws IOException { - List list = new ArrayList<>(); - DeleteQueryGroupResponse response = new DeleteQueryGroupResponse(list, RestStatus.OK); - assertEquals(response.getQueryGroups(), list); - - BytesStreamOutput out = new BytesStreamOutput(); - response.writeTo(out); - StreamInput streamInput = out.bytes().streamInput(); - - DeleteQueryGroupResponse otherResponse = new DeleteQueryGroupResponse(streamInput); - assertEquals(response.getRestStatus(), otherResponse.getRestStatus()); - assertEquals(0, otherResponse.getQueryGroups().size()); - } -} diff --git a/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/GetQueryGroupRequestTests.java b/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/GetQueryGroupRequestTests.java deleted file mode 100644 index a3f3083cce1e9..0000000000000 --- a/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/GetQueryGroupRequestTests.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -package org.opensearch.plugin.wlm; - -import org.opensearch.common.io.stream.BytesStreamOutput; -import org.opensearch.core.common.io.stream.StreamInput; -import org.opensearch.test.OpenSearchTestCase; - -import java.io.IOException; - -public class GetQueryGroupRequestTests extends OpenSearchTestCase { - - public void testSerialization() throws IOException { - GetQueryGroupRequest request = new GetQueryGroupRequest(QueryGroupTestUtils.NAME_ONE); - assertEquals(QueryGroupTestUtils.NAME_ONE, request.getName()); - BytesStreamOutput out = new BytesStreamOutput(); - request.writeTo(out); - StreamInput streamInput = out.bytes().streamInput(); - GetQueryGroupRequest otherRequest = new GetQueryGroupRequest(streamInput); - assertEquals(request.getName(), otherRequest.getName()); - } - - public void testSerializationWithNull() throws IOException { - GetQueryGroupRequest request = new GetQueryGroupRequest((String) null); - assertNull(request.getName()); - BytesStreamOutput out = new BytesStreamOutput(); - request.writeTo(out); - StreamInput streamInput = out.bytes().streamInput(); - GetQueryGroupRequest otherRequest = new GetQueryGroupRequest(streamInput); - assertEquals(request.getName(), otherRequest.getName()); - } -} diff --git a/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/GetQueryGroupResponseTests.java b/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/GetQueryGroupResponseTests.java deleted file mode 100644 index f9332df71a9b7..0000000000000 --- a/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/GetQueryGroupResponseTests.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -package org.opensearch.plugin.wlm; - -import org.opensearch.cluster.metadata.QueryGroup; -import org.opensearch.common.io.stream.BytesStreamOutput; -import org.opensearch.core.common.io.stream.StreamInput; -import org.opensearch.core.rest.RestStatus; -import org.opensearch.test.OpenSearchTestCase; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -public class GetQueryGroupResponseTests extends OpenSearchTestCase { - - public void testSerializationSingleQueryGroup() throws IOException { - List list = new ArrayList<>(); - list.add(QueryGroupTestUtils.queryGroupOne); - GetQueryGroupResponse response = new GetQueryGroupResponse(list, RestStatus.OK); - assertEquals(response.getQueryGroups(), list); - - BytesStreamOutput out = new BytesStreamOutput(); - response.writeTo(out); - StreamInput streamInput = out.bytes().streamInput(); - - GetQueryGroupResponse otherResponse = new GetQueryGroupResponse(streamInput); - assertEquals(response.getRestStatus(), otherResponse.getRestStatus()); - QueryGroupTestUtils.compareQueryGroups(response.getQueryGroups(), otherResponse.getQueryGroups()); - } - - public void testSerializationMultipleQueryGroup() throws IOException { - GetQueryGroupResponse response = new GetQueryGroupResponse(QueryGroupTestUtils.queryGroupList(), RestStatus.OK); - assertEquals(response.getQueryGroups(), QueryGroupTestUtils.queryGroupList()); - - BytesStreamOutput out = new BytesStreamOutput(); - response.writeTo(out); - StreamInput streamInput = out.bytes().streamInput(); - - GetQueryGroupResponse otherResponse = new GetQueryGroupResponse(streamInput); - assertEquals(response.getRestStatus(), otherResponse.getRestStatus()); - assertEquals(2, otherResponse.getQueryGroups().size()); - QueryGroupTestUtils.compareQueryGroups(response.getQueryGroups(), otherResponse.getQueryGroups()); - } - - public void testSerializationNull() throws IOException { - List list = new ArrayList<>(); - GetQueryGroupResponse response = new GetQueryGroupResponse(list, RestStatus.OK); - assertEquals(response.getQueryGroups(), list); - - BytesStreamOutput out = new BytesStreamOutput(); - response.writeTo(out); - StreamInput streamInput = out.bytes().streamInput(); - - GetQueryGroupResponse otherResponse = new GetQueryGroupResponse(streamInput); - assertEquals(response.getRestStatus(), otherResponse.getRestStatus()); - assertEquals(0, otherResponse.getQueryGroups().size()); - } -} diff --git a/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/UpdateQueryGroupRequestTests.java b/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/UpdateQueryGroupRequestTests.java deleted file mode 100644 index 888a7c632d9cb..0000000000000 --- a/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/UpdateQueryGroupRequestTests.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -package org.opensearch.plugin.wlm; - -import org.opensearch.cluster.metadata.QueryGroup; -import org.opensearch.common.io.stream.BytesStreamOutput; -import org.opensearch.core.common.io.stream.StreamInput; -import org.opensearch.test.OpenSearchTestCase; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -import static org.opensearch.plugin.wlm.QueryGroupTestUtils.MONITOR; -import static org.opensearch.plugin.wlm.QueryGroupTestUtils.NAME_ONE; -import static org.opensearch.plugin.wlm.QueryGroupTestUtils.TIMESTAMP_ONE; -import static org.opensearch.plugin.wlm.QueryGroupTestUtils.compareResourceLimits; -import static org.opensearch.plugin.wlm.QueryGroupTestUtils.queryGroupOne; - -public class UpdateQueryGroupRequestTests extends OpenSearchTestCase { - - public void testSerialization() throws IOException { - UpdateQueryGroupRequest request = new UpdateQueryGroupRequest(queryGroupOne); - BytesStreamOutput out = new BytesStreamOutput(); - request.writeTo(out); - StreamInput streamInput = out.bytes().streamInput(); - UpdateQueryGroupRequest otherRequest = new UpdateQueryGroupRequest(streamInput); - assertEquals(request.getName(), otherRequest.getName()); - assertEquals(request.getResourceLimits().size(), otherRequest.getResourceLimits().size()); - assertEquals(request.getMode(), otherRequest.getMode()); - compareResourceLimits(request.getResourceLimits(), otherRequest.getResourceLimits()); - assertEquals(request.getUpdatedAtInMillis(), otherRequest.getUpdatedAtInMillis()); - } - - public void testSerializationOnlyName() throws IOException { - UpdateQueryGroupRequest request = new UpdateQueryGroupRequest(NAME_ONE, null, new HashMap<>(), TIMESTAMP_ONE); - BytesStreamOutput out = new BytesStreamOutput(); - request.writeTo(out); - StreamInput streamInput = out.bytes().streamInput(); - UpdateQueryGroupRequest otherRequest = new UpdateQueryGroupRequest(streamInput); - assertEquals(request.getName(), otherRequest.getName()); - assertEquals(request.getResourceLimits(), otherRequest.getResourceLimits()); - assertEquals(request.getMode(), otherRequest.getMode()); - assertEquals(request.getUpdatedAtInMillis(), otherRequest.getUpdatedAtInMillis()); - } - - public void testSerializationOnlyResourceLimit() throws IOException { - UpdateQueryGroupRequest request = new UpdateQueryGroupRequest(NAME_ONE, null, Map.of("jvm", 0.4), TIMESTAMP_ONE); - BytesStreamOutput out = new BytesStreamOutput(); - request.writeTo(out); - StreamInput streamInput = out.bytes().streamInput(); - UpdateQueryGroupRequest otherRequest = new UpdateQueryGroupRequest(streamInput); - assertEquals(request.getName(), otherRequest.getName()); - assertEquals(request.getResourceLimits().size(), otherRequest.getResourceLimits().size()); - compareResourceLimits(request.getResourceLimits(), otherRequest.getResourceLimits()); - assertEquals(request.getMode(), otherRequest.getMode()); - assertEquals(request.getUpdatedAtInMillis(), otherRequest.getUpdatedAtInMillis()); - } - - public void testInvalidName() { - assertThrows( - IllegalArgumentException.class, - () -> new UpdateQueryGroupRequest("", QueryGroup.QueryGroupMode.fromName(MONITOR), Map.of("jvm", 0.3), TIMESTAMP_ONE) - ); - assertThrows( - IllegalArgumentException.class, - () -> new UpdateQueryGroupRequest("-test", QueryGroup.QueryGroupMode.fromName(MONITOR), Map.of("jvm", 0.3), TIMESTAMP_ONE) - ); - assertThrows( - IllegalArgumentException.class, - () -> new UpdateQueryGroupRequest(":test", QueryGroup.QueryGroupMode.fromName(MONITOR), Map.of("jvm", 0.3), TIMESTAMP_ONE) - ); - } - - public void testInvalidResourceLimitList() { - assertThrows( - NullPointerException.class, - () -> new UpdateQueryGroupRequest(NAME_ONE, QueryGroup.QueryGroupMode.fromName(MONITOR), null, TIMESTAMP_ONE) - ); - - assertThrows( - IllegalArgumentException.class, - () -> new UpdateQueryGroupRequest( - NAME_ONE, - QueryGroup.QueryGroupMode.fromName(MONITOR), - Map.of("jvm", 0.3, "jvm", 0.4), - TIMESTAMP_ONE - ) - ); - - assertThrows( - IllegalArgumentException.class, - () -> new UpdateQueryGroupRequest(NAME_ONE, QueryGroup.QueryGroupMode.fromName(MONITOR), Map.of("jvm", -0.3), TIMESTAMP_ONE) - ); - - assertThrows( - IllegalArgumentException.class, - () -> new UpdateQueryGroupRequest(NAME_ONE, QueryGroup.QueryGroupMode.fromName(MONITOR), Map.of("jvm", 12.0), TIMESTAMP_ONE) - ); - - assertThrows( - IllegalArgumentException.class, - () -> new UpdateQueryGroupRequest(NAME_ONE, QueryGroup.QueryGroupMode.fromName(MONITOR), Map.of("cpu", 0.3), TIMESTAMP_ONE) - ); - } - - public void testInvalidEnforcement() { - assertThrows( - IllegalArgumentException.class, - () -> new UpdateQueryGroupRequest(NAME_ONE, QueryGroup.QueryGroupMode.fromName("random"), Map.of("jvm", 0.3), TIMESTAMP_ONE) - ); - } -} diff --git a/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/UpdateQueryGroupResponseTests.java b/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/UpdateQueryGroupResponseTests.java deleted file mode 100644 index 6e744427629fd..0000000000000 --- a/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/UpdateQueryGroupResponseTests.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -package org.opensearch.plugin.wlm; - -import org.opensearch.cluster.metadata.QueryGroup; -import org.opensearch.common.io.stream.BytesStreamOutput; -import org.opensearch.core.common.io.stream.StreamInput; -import org.opensearch.core.rest.RestStatus; -import org.opensearch.test.OpenSearchTestCase; - -import java.io.IOException; -import java.util.List; - -public class UpdateQueryGroupResponseTests extends OpenSearchTestCase { - - public void testSerialization() throws IOException { - UpdateQueryGroupResponse response = new UpdateQueryGroupResponse(QueryGroupTestUtils.queryGroupOne, RestStatus.OK); - BytesStreamOutput out = new BytesStreamOutput(); - response.writeTo(out); - StreamInput streamInput = out.bytes().streamInput(); - UpdateQueryGroupResponse otherResponse = new UpdateQueryGroupResponse(streamInput); - assertEquals(response.getRestStatus(), otherResponse.getRestStatus()); - QueryGroup responseGroup = response.getQueryGroup(); - QueryGroup otherResponseGroup = otherResponse.getQueryGroup(); - QueryGroupTestUtils.compareQueryGroups(List.of(responseGroup), List.of(otherResponseGroup)); - } -} diff --git a/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/service/QueryGroupPersistenceServiceTests.java b/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/service/QueryGroupPersistenceServiceTests.java index 1e6ef3f114d3f..0f5e20f9b9474 100644 --- a/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/service/QueryGroupPersistenceServiceTests.java +++ b/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/service/QueryGroupPersistenceServiceTests.java @@ -12,11 +12,9 @@ import org.opensearch.cluster.ClusterState; import org.opensearch.cluster.metadata.Metadata; import org.opensearch.cluster.metadata.QueryGroup; -import org.opensearch.cluster.metadata.QueryGroup.QueryGroupMode; import org.opensearch.cluster.service.ClusterService; import org.opensearch.common.settings.ClusterSettings; import org.opensearch.common.settings.Settings; -import org.opensearch.plugin.wlm.UpdateQueryGroupRequest; import org.opensearch.test.OpenSearchTestCase; import org.opensearch.threadpool.ThreadPool; @@ -26,7 +24,6 @@ import java.util.Map; import java.util.Optional; import java.util.Set; -import java.util.stream.Collectors; import static org.opensearch.cluster.metadata.QueryGroup.builder; import static org.opensearch.plugin.wlm.QueryGroupTestUtils.MONITOR; @@ -34,13 +31,10 @@ import static org.opensearch.plugin.wlm.QueryGroupTestUtils.NAME_ONE; import static org.opensearch.plugin.wlm.QueryGroupTestUtils.NAME_TWO; import static org.opensearch.plugin.wlm.QueryGroupTestUtils.SANDBOX_MAX_SETTING_NAME; -import static org.opensearch.plugin.wlm.QueryGroupTestUtils._ID_ONE; import static org.opensearch.plugin.wlm.QueryGroupTestUtils.assertInflightValuesAreZero; -import static org.opensearch.plugin.wlm.QueryGroupTestUtils.clusterState; import static org.opensearch.plugin.wlm.QueryGroupTestUtils.compareQueryGroups; import static org.opensearch.plugin.wlm.QueryGroupTestUtils.prepareSandboxPersistenceService; import static org.opensearch.plugin.wlm.QueryGroupTestUtils.queryGroupList; -import static org.opensearch.plugin.wlm.QueryGroupTestUtils.queryGroupMap; import static org.opensearch.plugin.wlm.QueryGroupTestUtils.queryGroupOne; import static org.opensearch.plugin.wlm.QueryGroupTestUtils.queryGroupPersistenceService; import static org.opensearch.plugin.wlm.QueryGroupTestUtils.queryGroupTwo; @@ -48,119 +42,6 @@ public class QueryGroupPersistenceServiceTests extends OpenSearchTestCase { - public void testGetSingleQueryGroup() { - List groups = queryGroupPersistenceService().getFromClusterStateMetadata(NAME_ONE, clusterState()); - assertEquals(1, groups.size()); - QueryGroup queryGroup = groups.get(0); - compareQueryGroups(List.of(queryGroupOne), List.of(queryGroup)); - assertInflightValuesAreZero(queryGroupPersistenceService()); - } - - public void testGetAllQueryGroups() { - assertEquals(2, clusterState().metadata().queryGroups().size()); - List res = queryGroupPersistenceService().getFromClusterStateMetadata(null, clusterState()); - assertEquals(2, res.size()); - Set currentNAME = res.stream().map(QueryGroup::getName).collect(Collectors.toSet()); - assertTrue(currentNAME.contains(NAME_ONE)); - assertTrue(currentNAME.contains(NAME_TWO)); - compareQueryGroups(queryGroupList(), res); - assertInflightValuesAreZero(queryGroupPersistenceService()); - } - - public void testGetZeroQueryGroups() { - Settings settings = Settings.builder().build(); - ClusterSettings clusterSettings = new ClusterSettings(settings, ClusterSettings.BUILT_IN_CLUSTER_SETTINGS); - QueryGroupPersistenceService sandboxPersistenceService = new QueryGroupPersistenceService( - mock(ClusterService.class), - settings, - clusterSettings - ); - List res = sandboxPersistenceService.getFromClusterStateMetadata(NAME_NONE_EXISTED, clusterState()); - assertEquals(0, res.size()); - assertInflightValuesAreZero(queryGroupPersistenceService()); - } - - public void testDeleteSingleQueryGroup() { - ClusterState newClusterState = queryGroupPersistenceService().deleteQueryGroupInClusterState(NAME_TWO, clusterState()); - Set afterDeletionGroups = newClusterState.getMetadata().queryGroups(); - assertEquals(1, afterDeletionGroups.size()); - List oldSandbox = List.of(queryGroupMap.get(NAME_ONE)); - compareQueryGroups(new ArrayList<>(afterDeletionGroups), oldSandbox); - assertInflightValuesAreZero(queryGroupPersistenceService()); - } - - public void testDeleteAllQueryGroups() { - ClusterState newClusterState = queryGroupPersistenceService().deleteQueryGroupInClusterState(null, clusterState()); - Set afterDeletionGroups = newClusterState.getMetadata().queryGroups(); - assertEquals(0, afterDeletionGroups.size()); - assertInflightValuesAreZero(queryGroupPersistenceService()); - } - - public void testDeleteNonExistedQueryGroup() { - assertThrows( - RuntimeException.class, - () -> queryGroupPersistenceService().deleteQueryGroupInClusterState(NAME_NONE_EXISTED, clusterState()) - ); - } - - public void testUpdateQueryGroupAllFields() { - QueryGroup updated = builder().name(NAME_ONE) - ._id(_ID_ONE) - .mode(MONITOR) - .resourceLimits(Map.of("jvm", 0.15)) - .updatedAt(1690934400000L) - .build(); - UpdateQueryGroupRequest updateQueryGroupRequest = new UpdateQueryGroupRequest( - NAME_ONE, - QueryGroupMode.fromName(MONITOR), - Map.of("jvm", 0.15), - 1690934400000L - ); - ClusterState newClusterState = queryGroupPersistenceService().updateQueryGroupInClusterState( - updateQueryGroupRequest, - clusterState() - ); - List updatedSandboxes = new ArrayList<>(newClusterState.getMetadata().queryGroups()); - assertEquals(2, updatedSandboxes.size()); - compareQueryGroups(List.of(queryGroupTwo, updated), updatedSandboxes); - assertInflightValuesAreZero(queryGroupPersistenceService()); - } - - public void testUpdateQueryGroupResourceLimitsOnly() { - QueryGroup updated = builder().name(NAME_ONE) - ._id(_ID_ONE) - .mode(MONITOR) - .resourceLimits(Map.of("jvm", 0.15)) - .updatedAt(1690934400000L) - .build(); - UpdateQueryGroupRequest updateQueryGroupRequest = new UpdateQueryGroupRequest( - NAME_ONE, - QueryGroupMode.fromName(MONITOR), - Map.of("jvm", 0.15), - 1690934400000L - ); - ClusterState newClusterState = queryGroupPersistenceService().updateQueryGroupInClusterState( - updateQueryGroupRequest, - clusterState() - ); - Set updatedSandboxesMap = newClusterState.getMetadata().queryGroups(); - assertEquals(2, updatedSandboxesMap.size()); - Optional findUpdatedGroupOne = newClusterState.metadata() - .queryGroups() - .stream() - .filter(group -> group.getName().equals(NAME_ONE)) - .findFirst(); - Optional findUpdatedGroupTwo = newClusterState.metadata() - .queryGroups() - .stream() - .filter(group -> group.getName().equals(NAME_TWO)) - .findFirst(); - assertTrue(findUpdatedGroupOne.isPresent()); - assertTrue(findUpdatedGroupTwo.isPresent()); - compareQueryGroups(List.of(updated), List.of(findUpdatedGroupOne.get())); - assertInflightValuesAreZero(queryGroupPersistenceService()); - } - public void testCreateQueryGroup() { List setup = prepareSandboxPersistenceService(new ArrayList<>()); QueryGroupPersistenceService queryGroupPersistenceService1 = (QueryGroupPersistenceService) setup.get(0);