From 302e7ec18c5910bb4926f0fcccbe69b6ed46919e Mon Sep 17 00:00:00 2001 From: Swetha Guptha Date: Mon, 21 Oct 2024 23:32:59 +0530 Subject: [PATCH] Add cluster stats rolling version upgrade IT. Signed-off-by: Swetha Guptha --- .../opensearch/upgrades/ClusterStatsIT.java | 67 ++++++++++++ .../stats/ClusterStatsRequestTests.java | 102 ------------------ 2 files changed, 67 insertions(+), 102 deletions(-) create mode 100644 qa/rolling-upgrade/src/test/java/org/opensearch/upgrades/ClusterStatsIT.java delete mode 100644 server/src/test/java/org/opensearch/action/admin/cluster/stats/ClusterStatsRequestTests.java diff --git a/qa/rolling-upgrade/src/test/java/org/opensearch/upgrades/ClusterStatsIT.java b/qa/rolling-upgrade/src/test/java/org/opensearch/upgrades/ClusterStatsIT.java new file mode 100644 index 0000000000000..1c5f35db8ec46 --- /dev/null +++ b/qa/rolling-upgrade/src/test/java/org/opensearch/upgrades/ClusterStatsIT.java @@ -0,0 +1,67 @@ +/* + * 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.upgrades; + +import org.opensearch.Version; +import org.opensearch.client.Request; +import org.opensearch.client.Response; + +import java.io.IOException; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class ClusterStatsIT extends AbstractRollingTestCase { + + private final List nodeStatsMetrics = List.of("os", "process", "jvm", "fs", "plugins", "ingest", "network_types", "discovery_types", "packaging_types"); + + private final List indicesStatsMetrics = List.of("shards", "docs", "store", "fielddata", "query_cache", "completion", "segments", "analysis", "mappings"); + + public void testClusterStats() throws IOException { + Response response = client().performRequest(new Request("GET", "/_cluster/stats")); + validateClusterStatsWithFilterResponse(response, nodeStatsMetrics, indicesStatsMetrics); + if (AbstractRollingTestCase.UPGRADE_FROM_VERSION.onOrAfter(Version.V_3_0_0) || ( + CLUSTER_TYPE == ClusterType.UPGRADED && Version.CURRENT.onOrAfter(Version.V_3_0_0))) { + response = client().performRequest(new Request("GET", "/_cluster/stats/os/nodes/_all")); + validateClusterStatsWithFilterResponse(response, List.of("os"), Collections.emptyList()); + response = client().performRequest(new Request("GET", "/_cluster/stats/indices/mappings/nodes/_all")); + validateClusterStatsWithFilterResponse(response, Collections.emptyList(), List.of("mappings")); + response = client().performRequest(new Request("GET", "/_cluster/stats/os,indices/mappings/nodes/_all")); + validateClusterStatsWithFilterResponse(response, List.of("os"), List.of("mappings")); + } + } + + private void validateClusterStatsWithFilterResponse(Response response, List requestedNodesStatsMetrics, List requestedIndicesStatsMetrics) throws IOException { + assertEquals(200, response.getStatusLine().getStatusCode()); + Map entity = entityAsMap(response); + if (requestedNodesStatsMetrics != null && !requestedNodesStatsMetrics.isEmpty()) { + assertTrue(entity.containsKey("nodes")); + Map nodesStats = (Map) entity.get("nodes"); + for (String metric : nodeStatsMetrics) { + if (requestedNodesStatsMetrics.contains(metric)) { + assertTrue(nodesStats.containsKey(metric)); + } else { + assertFalse(nodesStats.containsKey(metric)); + } + } + } + + if (requestedIndicesStatsMetrics != null && !requestedIndicesStatsMetrics.isEmpty()) { + assertTrue(entity.containsKey("indices")); + Map indicesStats = (Map) entity.get("indices"); + for (String metric : indicesStatsMetrics) { + if (requestedIndicesStatsMetrics.contains(metric)) { + assertTrue(indicesStats.containsKey(metric)); + } else { + assertFalse(indicesStats.containsKey(metric)); + } + } + } + } +} diff --git a/server/src/test/java/org/opensearch/action/admin/cluster/stats/ClusterStatsRequestTests.java b/server/src/test/java/org/opensearch/action/admin/cluster/stats/ClusterStatsRequestTests.java deleted file mode 100644 index 7d2c109bad83a..0000000000000 --- a/server/src/test/java/org/opensearch/action/admin/cluster/stats/ClusterStatsRequestTests.java +++ /dev/null @@ -1,102 +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.action.admin.cluster.stats; - -import org.opensearch.Version; -import org.opensearch.common.io.stream.BytesStreamOutput; -import org.opensearch.core.common.io.stream.StreamInput; -import org.opensearch.test.OpenSearchTestCase; - -import java.util.Set; - -public class ClusterStatsRequestTests extends OpenSearchTestCase { - - public void testSerializationWithVersion3x() throws Exception { - ClusterStatsRequest clusterStatsRequest = getClusterStatsRequest(); - - Version testVersion = Version.V_3_0_0; - - BytesStreamOutput output = new BytesStreamOutput(); - output.setVersion(testVersion); - clusterStatsRequest.writeTo(output); - - StreamInput streamInput = output.bytes().streamInput(); - streamInput.setVersion(testVersion); - ClusterStatsRequest deserializedClusterStatsRequest = new ClusterStatsRequest(streamInput); - - validateClusterStatsRequest( - Set.of(ClusterStatsRequest.Metric.OS, ClusterStatsRequest.Metric.PLUGINS, ClusterStatsRequest.Metric.INDICES), - Set.of( - ClusterStatsRequest.IndexMetric.SHARDS, - ClusterStatsRequest.IndexMetric.QUERY_CACHE, - ClusterStatsRequest.IndexMetric.MAPPINGS - ), - Version.V_3_0_0, - deserializedClusterStatsRequest - ); - assertEquals(-1, streamInput.read()); - } - - public void testSerializationOnVersionBelow3x() throws Exception { - ClusterStatsRequest clusterStatsRequest = getClusterStatsRequest(); - - Version testVersion = Version.V_2_17_0; - - BytesStreamOutput output = new BytesStreamOutput(); - output.setVersion(testVersion); - clusterStatsRequest.writeTo(output); - - StreamInput streamInput = output.bytes().streamInput(); - streamInput.setVersion(testVersion); - ClusterStatsRequest deserializedClusterStatsRequest = new ClusterStatsRequest(streamInput); - - validateClusterStatsRequest( - Set.of(ClusterStatsRequest.Metric.OS, ClusterStatsRequest.Metric.PLUGINS, ClusterStatsRequest.Metric.INDICES), - Set.of( - ClusterStatsRequest.IndexMetric.SHARDS, - ClusterStatsRequest.IndexMetric.QUERY_CACHE, - ClusterStatsRequest.IndexMetric.MAPPINGS - ), - Version.V_2_17_0, - deserializedClusterStatsRequest - ); - assertEquals(-1, streamInput.read()); - } - - private ClusterStatsRequest getClusterStatsRequest() { - ClusterStatsRequest clusterStatsRequest = new ClusterStatsRequest(); - clusterStatsRequest.computeAllMetrics(true); - clusterStatsRequest.addMetric(ClusterStatsRequest.Metric.OS); - clusterStatsRequest.addMetric(ClusterStatsRequest.Metric.PLUGINS); - clusterStatsRequest.addMetric(ClusterStatsRequest.Metric.INDICES); - clusterStatsRequest.addIndexMetric(ClusterStatsRequest.IndexMetric.SHARDS); - clusterStatsRequest.addIndexMetric(ClusterStatsRequest.IndexMetric.QUERY_CACHE); - clusterStatsRequest.addIndexMetric(ClusterStatsRequest.IndexMetric.MAPPINGS); - clusterStatsRequest.useAggregatedNodeLevelResponses(true); - return clusterStatsRequest; - } - - private void validateClusterStatsRequest( - Set metrics, - Set indexMetrics, - Version version, - ClusterStatsRequest deserializedClusterStatsRequest - ) { - if (version.before(Version.V_3_0_0)) { - assertEquals(true, deserializedClusterStatsRequest.computeAllMetrics()); - assertTrue(deserializedClusterStatsRequest.requestedMetrics().isEmpty()); - assertTrue(deserializedClusterStatsRequest.indicesMetrics().isEmpty()); - } else { - assertEquals(true, deserializedClusterStatsRequest.computeAllMetrics()); - assertEquals(metrics, deserializedClusterStatsRequest.requestedMetrics()); - assertEquals(indexMetrics, deserializedClusterStatsRequest.indicesMetrics()); - } - } - -}