From 23bd5b59027bb50269ec957a8526813e0160e0e7 Mon Sep 17 00:00:00 2001 From: Ruirui Zhang Date: Tue, 13 Aug 2024 17:06:42 -0700 Subject: [PATCH] address comments Signed-off-by: Ruirui Zhang --- .../wlm/action/GetQueryGroupResponse.java | 10 ++-- .../action/TransportGetQueryGroupAction.java | 9 +-- .../wlm/rest/RestGetQueryGroupAction.java | 2 +- .../service/QueryGroupPersistenceService.java | 19 ++++--- .../plugin/wlm/QueryGroupTestUtils.java | 7 ++- .../wlm/action/GetQueryGroupRequestTests.java | 9 +++ .../action/GetQueryGroupResponseTests.java | 18 ++++++ .../TransportGetQueryGroupActionTests.java | 6 +- .../QueryGroupPersistenceServiceTests.java | 37 ++++++------ .../api/create_query_group_context.json | 18 ++++++ ...text.json => get_query_group_context.json} | 6 +- ...ate_query_group.yml => 10_query_group.yml} | 32 ++++++++--- .../test/wlm/15_get_query_group.yml | 57 ------------------- .../opensearch/cluster/metadata/Metadata.java | 4 +- .../cluster/metadata/QueryGroup.java | 4 +- 15 files changed, 129 insertions(+), 109 deletions(-) create mode 100644 plugins/workload-management/src/yamlRestTest/resources/rest-api-spec/api/create_query_group_context.json rename plugins/workload-management/src/yamlRestTest/resources/rest-api-spec/api/{query_group_context.json => get_query_group_context.json} (83%) rename plugins/workload-management/src/yamlRestTest/resources/rest-api-spec/test/wlm/{10_create_query_group.yml => 10_query_group.yml} (70%) delete mode 100644 plugins/workload-management/src/yamlRestTest/resources/rest-api-spec/test/wlm/15_get_query_group.yml diff --git a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/action/GetQueryGroupResponse.java b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/action/GetQueryGroupResponse.java index fa87e4e4e7277..547c501e6a28e 100644 --- a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/action/GetQueryGroupResponse.java +++ b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/action/GetQueryGroupResponse.java @@ -18,7 +18,7 @@ import org.opensearch.core.xcontent.XContentBuilder; import java.io.IOException; -import java.util.List; +import java.util.Collection; /** * Response for the get API for QueryGroup @@ -26,7 +26,7 @@ * @opensearch.experimental */ public class GetQueryGroupResponse extends ActionResponse implements ToXContent, ToXContentObject { - private final List queryGroups; + private final Collection queryGroups; private final RestStatus restStatus; /** @@ -34,7 +34,7 @@ public class GetQueryGroupResponse extends ActionResponse implements ToXContent, * @param queryGroups - The QueryGroup list to be fetched * @param restStatus - The rest status of the request */ - public GetQueryGroupResponse(final List queryGroups, RestStatus restStatus) { + public GetQueryGroupResponse(final Collection queryGroups, RestStatus restStatus) { this.queryGroups = queryGroups; this.restStatus = restStatus; } @@ -50,7 +50,7 @@ public GetQueryGroupResponse(StreamInput in) throws IOException { @Override public void writeTo(StreamOutput out) throws IOException { - out.writeList(queryGroups); + out.writeCollection(queryGroups); RestStatus.writeTo(out, restStatus); } @@ -69,7 +69,7 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws /** * queryGroups getter */ - public List getQueryGroups() { + public Collection getQueryGroups() { return queryGroups; } diff --git a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/action/TransportGetQueryGroupAction.java b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/action/TransportGetQueryGroupAction.java index cafa580d8743c..51bb21b255511 100644 --- a/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/action/TransportGetQueryGroupAction.java +++ b/plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/action/TransportGetQueryGroupAction.java @@ -10,6 +10,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.opensearch.ResourceNotFoundException; import org.opensearch.action.support.ActionFilters; import org.opensearch.action.support.clustermanager.TransportClusterManagerNodeReadAction; import org.opensearch.cluster.ClusterState; @@ -28,7 +29,7 @@ import org.opensearch.transport.TransportService; import java.io.IOException; -import java.util.List; +import java.util.Collection; /** * Transport action to get QueryGroup @@ -85,12 +86,12 @@ protected ClusterBlockException checkBlock(GetQueryGroupRequest request, Cluster @Override protected void clusterManagerOperation(GetQueryGroupRequest request, ClusterState state, ActionListener listener) throws Exception { - String name = request.getName(); - List resultGroups = QueryGroupPersistenceService.getFromClusterStateMetadata(name, state); + final String name = request.getName(); + final Collection resultGroups = QueryGroupPersistenceService.getFromClusterStateMetadata(name, state); if (resultGroups.isEmpty() && name != null && !name.isEmpty()) { logger.warn("No QueryGroup exists with the provided name: {}", name); - throw new IllegalArgumentException("No QueryGroup exists with the provided name: " + name); + throw new ResourceNotFoundException("No QueryGroup exists with the provided name: " + name); } listener.onResponse(new GetQueryGroupResponse(resultGroups, RestStatus.OK)); } 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 index 9566ddcce3e42..c250bd2979e98 100644 --- 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 @@ -53,7 +53,7 @@ public List routes() { @Override protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException { - GetQueryGroupRequest getQueryGroupRequest = new GetQueryGroupRequest(request.param("name")); + final GetQueryGroupRequest getQueryGroupRequest = new GetQueryGroupRequest(request.param("name")); return channel -> client.execute(GetQueryGroupAction.INSTANCE, getQueryGroupRequest, getQueryGroupResponse(channel)); } 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 cf3cc647f50eb..fe7080da78bbe 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 @@ -26,11 +26,11 @@ import org.opensearch.plugin.wlm.action.CreateQueryGroupResponse; import org.opensearch.search.ResourceType; -import java.util.ArrayList; +import java.util.Collection; import java.util.EnumMap; -import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.stream.Collectors; /** * This class defines the functions for QueryGroup persistence @@ -199,14 +199,17 @@ private Map calculateTotalUsage(Map ex * @param name - the QueryGroup name we are getting * @param currentState - current cluster state */ - public static List getFromClusterStateMetadata(String name, ClusterState currentState) { - Map currentGroups = currentState.getMetadata().queryGroups(); + public static Collection getFromClusterStateMetadata(String name, ClusterState currentState) { + final Map currentGroups = currentState.getMetadata().queryGroups(); if (name == null || name.isEmpty()) { - return new ArrayList<>(currentGroups.values()); + return currentGroups.values(); } - List resultGroups = new ArrayList<>(); - currentGroups.values().stream().filter(group -> group.getName().equals(name)).findFirst().ifPresent(resultGroups::add); - return resultGroups; + return currentGroups.values() + .stream() + .filter(group -> group.getName().equals(name)) + .findAny() + .stream() + .collect(Collectors.toList()); } /** diff --git a/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/QueryGroupTestUtils.java b/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/QueryGroupTestUtils.java index fc324853d9b34..5ba1ad5334712 100644 --- a/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/QueryGroupTestUtils.java +++ b/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/QueryGroupTestUtils.java @@ -23,6 +23,7 @@ import org.opensearch.threadpool.ThreadPool; import java.util.ArrayList; +import java.util.Collection; import java.util.Comparator; import java.util.HashSet; import java.util.List; @@ -130,8 +131,10 @@ public static Tuple preparePersisten return new Tuple(queryGroupPersistenceService, clusterState); } - public static void assertEqualQueryGroups(List listOne, List listTwo) { - assertEquals(listOne.size(), listTwo.size()); + public static void assertEqualQueryGroups(Collection collectionOne, Collection collectionTwo) { + assertEquals(collectionOne.size(), collectionTwo.size()); + List listOne = new ArrayList<>(collectionOne); + List listTwo = new ArrayList<>(collectionTwo); listOne.sort(Comparator.comparing(QueryGroup::getName)); listTwo.sort(Comparator.comparing(QueryGroup::getName)); for (int i = 0; i < listOne.size(); i++) { diff --git a/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/action/GetQueryGroupRequestTests.java b/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/action/GetQueryGroupRequestTests.java index 35efe52ac6fae..32b5f7ec9e2c3 100644 --- a/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/action/GetQueryGroupRequestTests.java +++ b/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/action/GetQueryGroupRequestTests.java @@ -17,6 +17,9 @@ public class GetQueryGroupRequestTests extends OpenSearchTestCase { + /** + * Test case to verify the serialization and deserialization of GetQueryGroupRequest. + */ public void testSerialization() throws IOException { GetQueryGroupRequest request = new GetQueryGroupRequest(QueryGroupTestUtils.NAME_ONE); assertEquals(QueryGroupTestUtils.NAME_ONE, request.getName()); @@ -27,6 +30,9 @@ public void testSerialization() throws IOException { assertEquals(request.getName(), otherRequest.getName()); } + /** + * Test case to verify the serialization and deserialization of GetQueryGroupRequest when name is null. + */ public void testSerializationWithNull() throws IOException { GetQueryGroupRequest request = new GetQueryGroupRequest((String) null); assertNull(request.getName()); @@ -37,6 +43,9 @@ public void testSerializationWithNull() throws IOException { assertEquals(request.getName(), otherRequest.getName()); } + /** + * Test case the validation function of GetQueryGroupRequest + */ public void testValidation() { GetQueryGroupRequest request = new GetQueryGroupRequest("a".repeat(51)); assertThrows(IllegalArgumentException.class, request::validate); diff --git a/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/action/GetQueryGroupResponseTests.java b/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/action/GetQueryGroupResponseTests.java index 356ccf6a32d9a..774f4b2d8db52 100644 --- a/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/action/GetQueryGroupResponseTests.java +++ b/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/action/GetQueryGroupResponseTests.java @@ -26,6 +26,9 @@ public class GetQueryGroupResponseTests extends OpenSearchTestCase { + /** + * Test case to verify the serialization and deserialization of GetQueryGroupResponse. + */ public void testSerializationSingleQueryGroup() throws IOException { List list = new ArrayList<>(); list.add(QueryGroupTestUtils.queryGroupOne); @@ -41,6 +44,9 @@ public void testSerializationSingleQueryGroup() throws IOException { QueryGroupTestUtils.assertEqualQueryGroups(response.getQueryGroups(), otherResponse.getQueryGroups()); } + /** + * Test case to verify the serialization and deserialization of GetQueryGroupResponse when the result contains multiple QueryGroups. + */ public void testSerializationMultipleQueryGroup() throws IOException { GetQueryGroupResponse response = new GetQueryGroupResponse(QueryGroupTestUtils.queryGroupList(), RestStatus.OK); assertEquals(response.getQueryGroups(), QueryGroupTestUtils.queryGroupList()); @@ -55,6 +61,9 @@ public void testSerializationMultipleQueryGroup() throws IOException { QueryGroupTestUtils.assertEqualQueryGroups(response.getQueryGroups(), otherResponse.getQueryGroups()); } + /** + * Test case to verify the serialization and deserialization of GetQueryGroupResponse when the result is empty. + */ public void testSerializationNull() throws IOException { List list = new ArrayList<>(); GetQueryGroupResponse response = new GetQueryGroupResponse(list, RestStatus.OK); @@ -69,6 +78,9 @@ public void testSerializationNull() throws IOException { assertEquals(0, otherResponse.getQueryGroups().size()); } + /** + * Test case to verify the toXContent of GetQueryGroupResponse. + */ public void testToXContentGetSingleQueryGroup() throws IOException { List queryGroupList = new ArrayList<>(); queryGroupList.add(QueryGroupTestUtils.queryGroupOne); @@ -91,6 +103,9 @@ public void testToXContentGetSingleQueryGroup() throws IOException { assertEquals(expected, actual); } + /** + * Test case to verify the toXContent of GetQueryGroupResponse when the result contains multiple QueryGroups. + */ public void testToXContentGetMultipleQueryGroup() throws IOException { List queryGroupList = new ArrayList<>(); queryGroupList.add(QueryGroupTestUtils.queryGroupOne); @@ -123,6 +138,9 @@ public void testToXContentGetMultipleQueryGroup() throws IOException { assertEquals(expected, actual); } + /** + * Test case to verify toXContent of GetQueryGroupResponse when the result contains zero QueryGroup. + */ public void testToXContentGetZeroQueryGroup() throws IOException { XContentBuilder builder = JsonXContent.contentBuilder().prettyPrint(); GetQueryGroupResponse otherResponse = new GetQueryGroupResponse(new ArrayList<>(), RestStatus.OK); diff --git a/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/action/TransportGetQueryGroupActionTests.java b/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/action/TransportGetQueryGroupActionTests.java index 7e3992bc4dc1e..755b11a5f4b89 100644 --- a/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/action/TransportGetQueryGroupActionTests.java +++ b/plugins/workload-management/src/test/java/org/opensearch/plugin/wlm/action/TransportGetQueryGroupActionTests.java @@ -8,6 +8,7 @@ package org.opensearch.plugin.wlm.action; +import org.opensearch.ResourceNotFoundException; import org.opensearch.action.support.ActionFilters; import org.opensearch.cluster.metadata.IndexNameExpressionResolver; import org.opensearch.cluster.service.ClusterService; @@ -23,6 +24,9 @@ public class TransportGetQueryGroupActionTests extends OpenSearchTestCase { + /** + * Test case for ClusterManagerOperation function + */ @SuppressWarnings("unchecked") public void testClusterManagerOperation() throws Exception { GetQueryGroupRequest getQueryGroupRequest1 = new GetQueryGroupRequest(NAME_NONE_EXISTED); @@ -35,7 +39,7 @@ public void testClusterManagerOperation() throws Exception { mock(IndexNameExpressionResolver.class) ); assertThrows( - IllegalArgumentException.class, + ResourceNotFoundException.class, () -> transportGetQueryGroupAction.clusterManagerOperation(getQueryGroupRequest1, clusterState(), mock(ActionListener.class)) ); transportGetQueryGroupAction.clusterManagerOperation(getQueryGroupRequest2, clusterState(), mock(ActionListener.class)); 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 617197917942c..80ecfdf9b7e47 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 @@ -52,6 +52,7 @@ import static org.opensearch.plugin.wlm.QueryGroupTestUtils.assertEqualQueryGroups; import static org.opensearch.plugin.wlm.QueryGroupTestUtils.clusterSettings; import static org.opensearch.plugin.wlm.QueryGroupTestUtils.clusterSettingsSet; +import static org.opensearch.plugin.wlm.QueryGroupTestUtils.clusterState; import static org.opensearch.plugin.wlm.QueryGroupTestUtils.preparePersistenceServiceSetup; import static org.opensearch.plugin.wlm.QueryGroupTestUtils.queryGroupList; import static org.opensearch.plugin.wlm.QueryGroupTestUtils.queryGroupOne; @@ -255,11 +256,12 @@ public void testPersistInClusterStateMetadataFailure() { verify(listener).onFailure(any(RuntimeException.class)); } + /** + * Tests getting a single QueryGroup + */ public void testGetSingleQueryGroup() { - List groups = QueryGroupPersistenceService.getFromClusterStateMetadata( - QueryGroupTestUtils.NAME_ONE, - QueryGroupTestUtils.clusterState() - ); + Collection groupsCollections = QueryGroupPersistenceService.getFromClusterStateMetadata(NAME_ONE, clusterState()); + List groups = new ArrayList<>(groupsCollections); assertEquals(1, groups.size()); QueryGroup queryGroup = groups.get(0); List listOne = new ArrayList<>(); @@ -269,9 +271,13 @@ public void testGetSingleQueryGroup() { QueryGroupTestUtils.assertEqualQueryGroups(listOne, listTwo); } + /** + * Tests getting all QueryGroups + */ public void testGetAllQueryGroups() { assertEquals(2, QueryGroupTestUtils.clusterState().metadata().queryGroups().size()); - List res = QueryGroupPersistenceService.getFromClusterStateMetadata(null, QueryGroupTestUtils.clusterState()); + Collection groupsCollections = QueryGroupPersistenceService.getFromClusterStateMetadata(null, clusterState()); + List res = new ArrayList<>(groupsCollections); assertEquals(2, res.size()); Set currentNAME = res.stream().map(QueryGroup::getName).collect(Collectors.toSet()); assertTrue(currentNAME.contains(QueryGroupTestUtils.NAME_ONE)); @@ -279,22 +285,21 @@ public void testGetAllQueryGroups() { QueryGroupTestUtils.assertEqualQueryGroups(QueryGroupTestUtils.queryGroupList(), res); } - public void testGetZeroQueryGroups() { - List res = QueryGroupPersistenceService.getFromClusterStateMetadata( - QueryGroupTestUtils.NAME_NONE_EXISTED, - QueryGroupTestUtils.clusterState() - ); - assertEquals(0, res.size()); - } - + /** + * Tests getting a QueryGroup with invalid name + */ public void testGetNonExistedQueryGroups() { - List groups = QueryGroupPersistenceService.getFromClusterStateMetadata( - QueryGroupTestUtils.NAME_NONE_EXISTED, - QueryGroupTestUtils.clusterState() + Collection groupsCollections = QueryGroupPersistenceService.getFromClusterStateMetadata( + NAME_NONE_EXISTED, + clusterState() ); + List groups = new ArrayList<>(groupsCollections); assertEquals(0, groups.size()); } + /** + * Tests setting maxQueryGroupCount + */ public void testMaxQueryGroupCount() { assertThrows(IllegalArgumentException.class, () -> QueryGroupTestUtils.queryGroupPersistenceService().setMaxQueryGroupCount(-1)); QueryGroupPersistenceService queryGroupPersistenceService = QueryGroupTestUtils.queryGroupPersistenceService(); diff --git a/plugins/workload-management/src/yamlRestTest/resources/rest-api-spec/api/create_query_group_context.json b/plugins/workload-management/src/yamlRestTest/resources/rest-api-spec/api/create_query_group_context.json new file mode 100644 index 0000000000000..bb4620c01f2d6 --- /dev/null +++ b/plugins/workload-management/src/yamlRestTest/resources/rest-api-spec/api/create_query_group_context.json @@ -0,0 +1,18 @@ +{ + "create_query_group_context": { + "stability": "experimental", + "url": { + "paths": [ + { + "path": "/_wlm/query_group", + "methods": ["PUT", "POST"], + "parts": {} + } + ] + }, + "params":{}, + "body":{ + "description":"The QueryGroup schema" + } + } +} diff --git a/plugins/workload-management/src/yamlRestTest/resources/rest-api-spec/api/query_group_context.json b/plugins/workload-management/src/yamlRestTest/resources/rest-api-spec/api/get_query_group_context.json similarity index 83% rename from plugins/workload-management/src/yamlRestTest/resources/rest-api-spec/api/query_group_context.json rename to plugins/workload-management/src/yamlRestTest/resources/rest-api-spec/api/get_query_group_context.json index b3320306d9270..23c6cfe6d46ce 100644 --- a/plugins/workload-management/src/yamlRestTest/resources/rest-api-spec/api/query_group_context.json +++ b/plugins/workload-management/src/yamlRestTest/resources/rest-api-spec/api/get_query_group_context.json @@ -5,14 +5,12 @@ "paths": [ { "path": "/_wlm/query_group", - "methods": ["PUT", "POST", "GET"], + "methods": ["GET"], "parts": {} }, { "path": "/_wlm/query_group/{name}", - "methods": [ - "GET" - ], + "methods": ["GET"], "parts": { "name": { "type": "string", diff --git a/plugins/workload-management/src/yamlRestTest/resources/rest-api-spec/test/wlm/10_create_query_group.yml b/plugins/workload-management/src/yamlRestTest/resources/rest-api-spec/test/wlm/10_query_group.yml similarity index 70% rename from plugins/workload-management/src/yamlRestTest/resources/rest-api-spec/test/wlm/10_create_query_group.yml rename to plugins/workload-management/src/yamlRestTest/resources/rest-api-spec/test/wlm/10_query_group.yml index caa9342640164..a22dfa2f4477e 100644 --- a/plugins/workload-management/src/yamlRestTest/resources/rest-api-spec/test/wlm/10_create_query_group.yml +++ b/plugins/workload-management/src/yamlRestTest/resources/rest-api-spec/test/wlm/10_query_group.yml @@ -1,10 +1,10 @@ -"test create QueryGroup API": +"test CRUD Operations for QueryGroup API ": - skip: version: " - 2.16.99" reason: "QueryGroup WorkloadManagement feature was added in 2.17" - do: - query_group_context: + create_query_group_context: body: { "name": "analytics", @@ -20,9 +20,18 @@ - match: { resource_limits.cpu: 0.4 } - match: { resource_limits.memory: 0.2 } + - do: + get_query_group_context: + name: "analytics" + + - match: { query_groups.0.name: "analytics" } + - match: { query_groups.0.resiliency_mode: "monitor" } + - match: { query_groups.0.resource_limits.cpu: 0.4 } + - match: { query_groups.0.resource_limits.memory: 0.2 } + - do: catch: /illegal_argument_exception/ - query_group_context: + create_query_group_context: body: { "name": "analytics", @@ -35,7 +44,7 @@ - do: catch: /illegal_argument_exception/ - query_group_context: + create_query_group_context: body: { "name": "analytics2", @@ -48,7 +57,7 @@ - do: catch: /illegal_argument_exception/ - query_group_context: + create_query_group_context: body: { "name": "analytics2", @@ -61,7 +70,7 @@ - do: catch: /illegal_argument_exception/ - query_group_context: + create_query_group_context: body: { "name": "", @@ -73,7 +82,7 @@ } - do: - query_group_context: + create_query_group_context: body: { "name": "analytics2", @@ -88,3 +97,12 @@ - match: { resiliency_mode: "monitor" } - match: { resource_limits.cpu: 0.35 } - match: { resource_limits.memory: 0.25 } + + - do: + get_query_group_context: + name: "analytics2" + + - match: { query_groups.0.name: "analytics2" } + - match: { query_groups.0.resiliency_mode: "monitor" } + - match: { query_groups.0.resource_limits.cpu: 0.35 } + - match: { query_groups.0.resource_limits.memory: 0.25 } diff --git a/plugins/workload-management/src/yamlRestTest/resources/rest-api-spec/test/wlm/15_get_query_group.yml b/plugins/workload-management/src/yamlRestTest/resources/rest-api-spec/test/wlm/15_get_query_group.yml deleted file mode 100644 index 74eb454b6912f..0000000000000 --- a/plugins/workload-management/src/yamlRestTest/resources/rest-api-spec/test/wlm/15_get_query_group.yml +++ /dev/null @@ -1,57 +0,0 @@ -"test get QueryGroup API": - - skip: - version: " - 2.16.99" - reason: "QueryGroup WorkloadManagement feature was added in 2.17" - - - do: - query_group_context: - body: - { - "name": "analytics", - "resiliency_mode": "monitor", - "resource_limits": { - "cpu": 0.4, - "memory": 0.2 - } - } - - - match: { name: "analytics" } - - match: { resiliency_mode: "monitor" } - - match: { resource_limits.cpu: 0.4 } - - match: { resource_limits.memory: 0.2 } - - - do: - query_group_context: - name: "analytics" - - - match: { query_groups.0.name: "analytics" } - - match: { query_groups.0.resiliency_mode: "monitor" } - - match: { query_groups.0.resource_limits.cpu: 0.4 } - - match: { query_groups.0.resource_limits.memory: 0.2 } - - - do: - catch: /illegal_argument_exception/ - query_group_context: - name: "analytics1" - - - do: - query_group_context: - body: - { - "name": "analytics2", - "resiliency_mode": "monitor", - "resource_limits": { - "cpu": 0.1, - "memory": 0.1 - } - } - - - match: { name: "analytics2" } - - match: { resiliency_mode: "monitor" } - - match: { resource_limits.cpu: 0.1 } - - match: { resource_limits.memory: 0.1 } - - - do: - query_group_context: - - - match: { query_groups.0.name: ["analytics", "analytics2"] } diff --git a/server/src/main/java/org/opensearch/cluster/metadata/Metadata.java b/server/src/main/java/org/opensearch/cluster/metadata/Metadata.java index 26f2e9ff34db5..4da6c68b40733 100644 --- a/server/src/main/java/org/opensearch/cluster/metadata/Metadata.java +++ b/server/src/main/java/org/opensearch/cluster/metadata/Metadata.java @@ -1831,8 +1831,8 @@ static void validateDataStreams(SortedMap indicesLooku for (DataStream ds : dsMetadata.dataStreams().values()) { String prefix = DataStream.BACKING_INDEX_PREFIX + ds.getName() + "-"; Set conflicts = indicesLookup.subMap(prefix, DataStream.BACKING_INDEX_PREFIX + ds.getName() + ".") // '.' is the - // char after - // '-' + // char after + // '-' .keySet() .stream() .filter(s -> NUMBER_PATTERN.matcher(s.substring(prefix.length())).matches()) diff --git a/server/src/main/java/org/opensearch/cluster/metadata/QueryGroup.java b/server/src/main/java/org/opensearch/cluster/metadata/QueryGroup.java index 5ce226cd8b074..9b5c6bc2369a6 100644 --- a/server/src/main/java/org/opensearch/cluster/metadata/QueryGroup.java +++ b/server/src/main/java/org/opensearch/cluster/metadata/QueryGroup.java @@ -109,8 +109,8 @@ public void writeTo(StreamOutput out) throws IOException { } public static void validateName(String name) { - if (name.length() > MAX_CHARS_ALLOWED_IN_NAME || name.isEmpty()) { - throw new IllegalArgumentException("QueryGroup.name shouldn't be empty or more than 50 chars long"); + if (name == null || name.isEmpty() || name.length() > MAX_CHARS_ALLOWED_IN_NAME) { + throw new IllegalArgumentException("QueryGroup.name shouldn't be null, empty or more than 50 chars long"); } }