diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 48557884a8893..0000000000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - diff --git a/server/src/internalClusterTest/java/org/opensearch/nodestats/NodeStatsIT.java b/server/src/internalClusterTest/java/org/opensearch/nodestats/NodeStatsIT.java index 08f09a1421fd7..4856f1228996b 100644 --- a/server/src/internalClusterTest/java/org/opensearch/nodestats/NodeStatsIT.java +++ b/server/src/internalClusterTest/java/org/opensearch/nodestats/NodeStatsIT.java @@ -332,58 +332,58 @@ public void testNodeIndicesStatsDefaultResponse() { * Optimized behavior - to avoid unnecessary IO in the form of shard-stats when not required, we not honor the levels on the * individual data nodes instead and pre-compute information as required. */ - public void testNodeIndicesStatsOptimizedResponse() { - String testLevel = randomFrom("null", "node", "indices", "shards", "unknown"); - internalCluster().startNode(); - ensureGreen(); - String indexName = "test1"; - index(indexName, "type", "1", "f", "f"); - refresh(); - - NodesStatsResponse response; - CommonStatsFlags commonStatsFlags = new CommonStatsFlags(); - commonStatsFlags.optimizeNodeIndicesStatsOnLevel(true); - if (!testLevel.equals("null")) { - ArrayList level_arg = new ArrayList<>(); - level_arg.add(testLevel); - - commonStatsFlags.setLevels(level_arg.toArray(new String[0])); - } - response = client().admin().cluster().prepareNodesStats().setIndices(commonStatsFlags).get(); - - response.getNodes().forEach(nodeStats -> { - try { - XContentBuilder builder = XContentFactory.jsonBuilder(); - builder.startObject(); - builder = nodeStats.getIndices().toXContent(builder, new ToXContent.MapParams(Collections.singletonMap("level", "shards"))); - builder.endObject(); - - Map xContentMap = xContentBuilderToMap(builder); - LinkedHashMap indicesStatsMap = (LinkedHashMap) xContentMap.get("indices"); - LinkedHashMap indicesStats = (LinkedHashMap) indicesStatsMap.get("indices"); - LinkedHashMap shardStats = (LinkedHashMap) indicesStatsMap.get("shards"); - - switch (testLevel) { - case "shards": - assertFalse(shardStats.isEmpty()); - assertFalse(indicesStats.isEmpty()); - break; - case "indices": - assertTrue(shardStats.isEmpty()); - assertFalse(indicesStats.isEmpty()); - break; - case "node": - case "null": - case "unknown": - assertTrue(shardStats.isEmpty()); - assertTrue(indicesStats.isEmpty()); - break; - } - } catch (IOException e) { - throw new RuntimeException(e); - } - }); - } +// public void testNodeIndicesStatsOptimizedResponse() { +// String testLevel = randomFrom("null", "node", "indices", "shards", "unknown"); +// internalCluster().startNode(); +// ensureGreen(); +// String indexName = "test1"; +// index(indexName, "type", "1", "f", "f"); +// refresh(); +// +// NodesStatsResponse response; +// CommonStatsFlags commonStatsFlags = new CommonStatsFlags(); +// commonStatsFlags.optimizeNodeIndicesStatsOnLevel(true); +// if (!testLevel.equals("null")) { +// ArrayList level_arg = new ArrayList<>(); +// level_arg.add(testLevel); +// +// commonStatsFlags.setLevels(level_arg.toArray(new String[0])); +// } +// response = client().admin().cluster().prepareNodesStats().setIndices(commonStatsFlags).get(); +// +// response.getNodes().forEach(nodeStats -> { +// try { +// XContentBuilder builder = XContentFactory.jsonBuilder(); +// builder.startObject(); +// builder = nodeStats.getIndices().toXContent(builder, new ToXContent.MapParams(Collections.singletonMap("level", "shards"))); +// builder.endObject(); +// +// Map xContentMap = xContentBuilderToMap(builder); +// LinkedHashMap indicesStatsMap = (LinkedHashMap) xContentMap.get("indices"); +// LinkedHashMap indicesStats = (LinkedHashMap) indicesStatsMap.get("indices"); +// LinkedHashMap shardStats = (LinkedHashMap) indicesStatsMap.get("shards"); +// +// switch (testLevel) { +// case "shards": +// assertFalse(shardStats.isEmpty()); +// assertFalse(indicesStats.isEmpty()); +// break; +// case "indices": +// assertTrue(shardStats.isEmpty()); +// assertFalse(indicesStats.isEmpty()); +// break; +// case "node": +// case "null": +// case "unknown": +// assertTrue(shardStats.isEmpty()); +// assertTrue(indicesStats.isEmpty()); +// break; +// } +// } catch (IOException e) { +// throw new RuntimeException(e); +// } +// }); +// } private Map xContentBuilderToMap(XContentBuilder xContentBuilder) { return XContentHelper.convertToMap(BytesReference.bytes(xContentBuilder), true, xContentBuilder.contentType()).v2(); diff --git a/server/src/main/java/org/opensearch/action/admin/cluster/node/stats/NodesStatsRequest.java b/server/src/main/java/org/opensearch/action/admin/cluster/node/stats/NodesStatsRequest.java index 970c4340dd33b..689fe497751cf 100644 --- a/server/src/main/java/org/opensearch/action/admin/cluster/node/stats/NodesStatsRequest.java +++ b/server/src/main/java/org/opensearch/action/admin/cluster/node/stats/NodesStatsRequest.java @@ -127,15 +127,15 @@ public NodesStatsRequest indices(boolean indices) { return this; } - /** - * Use Optimized Response filtered based on level - */ - public NodesStatsRequest useOptimizedNodeIndicesStats(boolean useOptimizedNodeIndicesStats) { - if (this.indices != null) { - this.indices.optimizeNodeIndicesStatsOnLevel(true); - } - return this; - } +// /** +// * Use Optimized Response filtered based on level +// */ +// public NodesStatsRequest useOptimizedNodeIndicesStats(boolean useOptimizedNodeIndicesStats) { +// if (this.indices != null) { +// this.indices.optimizeNodeIndicesStatsOnLevel(true); +// } +// return this; +// } /** * Get the names of requested metrics, excluding indices, which are diff --git a/server/src/main/java/org/opensearch/action/admin/indices/stats/CommonStatsFlags.java b/server/src/main/java/org/opensearch/action/admin/indices/stats/CommonStatsFlags.java index faccdcf02362c..53425a3923d53 100644 --- a/server/src/main/java/org/opensearch/action/admin/indices/stats/CommonStatsFlags.java +++ b/server/src/main/java/org/opensearch/action/admin/indices/stats/CommonStatsFlags.java @@ -67,7 +67,7 @@ public class CommonStatsFlags implements Writeable, Cloneable { // Used for metric CACHE_STATS, to determine which caches to report stats for private EnumSet includeCaches = EnumSet.noneOf(CacheType.class); private String[] levels = new String[0]; - private boolean optimizeNodeIndicesStatsOnLevel = false; +// private boolean optimizeNodeIndicesStatsOnLevel = false; /** * @param flags flags to set. If no flags are supplied, default flags will be set. @@ -101,9 +101,9 @@ public CommonStatsFlags(StreamInput in) throws IOException { includeCaches = in.readEnumSet(CacheType.class); levels = in.readStringArray(); } - if (in.getVersion().onOrAfter(Version.V_2_16_0)) { - optimizeNodeIndicesStatsOnLevel = in.readBoolean(); - } +// if (in.getVersion().onOrAfter(Version.V_2_16_0)) { +// optimizeNodeIndicesStatsOnLevel = in.readBoolean(); +// } } @Override @@ -128,9 +128,9 @@ public void writeTo(StreamOutput out) throws IOException { out.writeEnumSet(includeCaches); out.writeStringArrayNullable(levels); } - if (out.getVersion().onOrAfter(Version.V_2_16_0)) { - out.writeBoolean(optimizeNodeIndicesStatsOnLevel); - } +// if (out.getVersion().onOrAfter(Version.V_2_16_0)) { +// out.writeBoolean(optimizeNodeIndicesStatsOnLevel); +// } } /** @@ -269,13 +269,13 @@ public boolean includeSegmentFileSizes() { return this.includeSegmentFileSizes; } - public void optimizeNodeIndicesStatsOnLevel(boolean optimizeNodeIndicesStatsOnLevel) { - this.optimizeNodeIndicesStatsOnLevel = optimizeNodeIndicesStatsOnLevel; - } - - public boolean optimizeNodeIndicesStatsOnLevel() { - return this.optimizeNodeIndicesStatsOnLevel; - } +// public void optimizeNodeIndicesStatsOnLevel(boolean optimizeNodeIndicesStatsOnLevel) { +// this.optimizeNodeIndicesStatsOnLevel = optimizeNodeIndicesStatsOnLevel; +// } +// +// public boolean optimizeNodeIndicesStatsOnLevel() { +// return this.optimizeNodeIndicesStatsOnLevel; +// } public boolean isSet(Flag flag) { return flags.contains(flag); diff --git a/server/src/test/java/org/opensearch/action/admin/cluster/node/stats/NodeStatsTests.java b/server/src/test/java/org/opensearch/action/admin/cluster/node/stats/NodeStatsTests.java index 88db8efff41b6..af60b79f1c5ef 100644 --- a/server/src/test/java/org/opensearch/action/admin/cluster/node/stats/NodeStatsTests.java +++ b/server/src/test/java/org/opensearch/action/admin/cluster/node/stats/NodeStatsTests.java @@ -1114,146 +1114,146 @@ public Map> getStatsByShard() { } } - public void testNodeIndicesStatsSerializationWithOldESVersionNodes() throws IOException { - long numDocs = randomLongBetween(0, 10000); - long numDeletedDocs = randomLongBetween(0, 100); - CommonStats commonStats = new CommonStats(CommonStatsFlags.NONE); - - commonStats.docs = new DocsStats(numDocs, numDeletedDocs, 0); - commonStats.store = new StoreStats(100, 0L); - commonStats.indexing = new IndexingStats(); - - CommonStatsFlags commonStatsFlags = new CommonStatsFlags(); - commonStatsFlags.clear(); - commonStatsFlags.set(CommonStatsFlags.Flag.Docs, true); - commonStatsFlags.set(CommonStatsFlags.Flag.Store, true); - commonStatsFlags.set(CommonStatsFlags.Flag.Indexing, true); - - Index newIndex = new Index("index", "_na_"); - - MockNodeIndicesStats mockNodeIndicesStats = generateMockNodeIndicesStats(commonStats, newIndex, commonStatsFlags); - - // To test out scenario when the incoming node stats response is from a node with an older ES Version. - try (BytesStreamOutput out = new BytesStreamOutput()) { - out.setVersion(Version.V_2_13_0); - mockNodeIndicesStats.writeTo(out); - try (StreamInput in = out.bytes().streamInput()) { - in.setVersion(Version.V_2_13_0); - MockNodeIndicesStats newNodeIndicesStats = new MockNodeIndicesStats(in); - - List incomingIndexStats = newNodeIndicesStats.getStatsByShard().get(newIndex); - incomingIndexStats.forEach(indexShardStats -> { - ShardStats shardStats = Arrays.stream(indexShardStats.getShards()).findFirst().get(); - DocsStats incomingDocStats = shardStats.getStats().docs; - - DocsStats hostDocStats = new DocsStats(numDocs, numDeletedDocs, 0); - assertEquals(incomingDocStats.getCount(), hostDocStats.getCount()); - assertEquals(incomingDocStats.getTotalSizeInBytes(), hostDocStats.getTotalSizeInBytes()); - assertEquals(incomingDocStats.getAverageSizeInBytes(), hostDocStats.getAverageSizeInBytes()); - assertEquals(incomingDocStats.getDeleted(), hostDocStats.getDeleted()); - }); - } - } - } - - public void testNodeIndicesStatsSerializationOnNewVersions() throws IOException { - long numDocs = randomLongBetween(0, 10000); - long numDeletedDocs = randomLongBetween(0, 100); - String levelParam = randomFrom("node", "indices", "shards"); - - CommonStats commonStats = new CommonStats(CommonStatsFlags.NONE); - - commonStats.docs = new DocsStats(numDocs, numDeletedDocs, 0); - commonStats.store = new StoreStats(100, 0L); - commonStats.indexing = new IndexingStats(); - - CommonStatsFlags commonStatsFlags = new CommonStatsFlags(); - commonStatsFlags.clear(); - commonStatsFlags.set(CommonStatsFlags.Flag.Docs, true); - commonStatsFlags.set(CommonStatsFlags.Flag.Store, true); - commonStatsFlags.set(CommonStatsFlags.Flag.Indexing, true); - commonStatsFlags.optimizeNodeIndicesStatsOnLevel(true); - - ArrayList level_arg = new ArrayList<>(); - level_arg.add(levelParam); - - commonStatsFlags.setLevels(level_arg.toArray(new String[0])); - - Index newIndex = new Index("index", "_na_"); - - MockNodeIndicesStats mockNodeIndicesStats = generateMockNodeIndicesStats(commonStats, newIndex, commonStatsFlags); - - // To test out scenario when the incoming node stats response is from a node with an older ES Version. - try (BytesStreamOutput out = new BytesStreamOutput()) { - mockNodeIndicesStats.writeTo(out); - try (StreamInput in = out.bytes().streamInput()) { - MockNodeIndicesStats newNodeIndicesStats = new MockNodeIndicesStats(in); - switch (levelParam) { - case "node": - assertNull(newNodeIndicesStats.getStatsByIndex()); - assertNull(newNodeIndicesStats.getStatsByShard()); - break; - case "indices": - assertNull(newNodeIndicesStats.getStatsByShard()); - assertNotNull(newNodeIndicesStats.getStatsByIndex()); - break; - case "shards": - assertNull(newNodeIndicesStats.getStatsByIndex()); - assertNotNull(newNodeIndicesStats.getStatsByShard()); - break; - } - } - } - } - - public MockNodeIndicesStats generateMockNodeIndicesStats(CommonStats commonStats, Index index, CommonStatsFlags commonStatsFlags) { - DiscoveryNode localNode = new DiscoveryNode("local", buildNewFakeTransportAddress(), Version.CURRENT); - Map> statsByShard = new HashMap<>(); - List indexShardStatsList = new ArrayList<>(); - Index statsIndex = null; - for (int i = 0; i < 2; i++) { - ShardRoutingState shardRoutingState = ShardRoutingState.fromValue((byte) randomIntBetween(2, 3)); - ShardRouting shardRouting = TestShardRouting.newShardRouting( - index.getName(), - i, - localNode.getId(), - randomBoolean(), - shardRoutingState - ); - - if (statsIndex == null) { - statsIndex = shardRouting.shardId().getIndex(); - } - - Path path = createTempDir().resolve("indices") - .resolve(shardRouting.shardId().getIndex().getUUID()) - .resolve(String.valueOf(shardRouting.shardId().id())); - - ShardStats shardStats = new ShardStats( - shardRouting, - new ShardPath(false, path, path, shardRouting.shardId()), - commonStats, - null, - null, - null - ); - IndexShardStats indexShardStats = new IndexShardStats(shardRouting.shardId(), new ShardStats[] { shardStats }); - indexShardStatsList.add(indexShardStats); - } - - statsByShard.put(statsIndex, indexShardStatsList); - - ClusterSettings clusterSettings = new ClusterSettings(Settings.EMPTY, ClusterSettings.BUILT_IN_CLUSTER_SETTINGS); - - if (commonStatsFlags.optimizeNodeIndicesStatsOnLevel()) { - return new MockNodeIndicesStats( - new CommonStats(commonStatsFlags), - statsByShard, - new SearchRequestStats(clusterSettings), - commonStatsFlags.getLevels() - ); - } else { - return new MockNodeIndicesStats(new CommonStats(commonStatsFlags), statsByShard, new SearchRequestStats(clusterSettings)); - } - } +// public void testNodeIndicesStatsSerializationWithOldESVersionNodes() throws IOException { +// long numDocs = randomLongBetween(0, 10000); +// long numDeletedDocs = randomLongBetween(0, 100); +// CommonStats commonStats = new CommonStats(CommonStatsFlags.NONE); +// +// commonStats.docs = new DocsStats(numDocs, numDeletedDocs, 0); +// commonStats.store = new StoreStats(100, 0L); +// commonStats.indexing = new IndexingStats(); +// +// CommonStatsFlags commonStatsFlags = new CommonStatsFlags(); +// commonStatsFlags.clear(); +// commonStatsFlags.set(CommonStatsFlags.Flag.Docs, true); +// commonStatsFlags.set(CommonStatsFlags.Flag.Store, true); +// commonStatsFlags.set(CommonStatsFlags.Flag.Indexing, true); +// +// Index newIndex = new Index("index", "_na_"); +// +// MockNodeIndicesStats mockNodeIndicesStats = generateMockNodeIndicesStats(commonStats, newIndex, commonStatsFlags); +// +// // To test out scenario when the incoming node stats response is from a node with an older ES Version. +// try (BytesStreamOutput out = new BytesStreamOutput()) { +// out.setVersion(Version.V_2_13_0); +// mockNodeIndicesStats.writeTo(out); +// try (StreamInput in = out.bytes().streamInput()) { +// in.setVersion(Version.V_2_13_0); +// MockNodeIndicesStats newNodeIndicesStats = new MockNodeIndicesStats(in); +// +// List incomingIndexStats = newNodeIndicesStats.getStatsByShard().get(newIndex); +// incomingIndexStats.forEach(indexShardStats -> { +// ShardStats shardStats = Arrays.stream(indexShardStats.getShards()).findFirst().get(); +// DocsStats incomingDocStats = shardStats.getStats().docs; +// +// DocsStats hostDocStats = new DocsStats(numDocs, numDeletedDocs, 0); +// assertEquals(incomingDocStats.getCount(), hostDocStats.getCount()); +// assertEquals(incomingDocStats.getTotalSizeInBytes(), hostDocStats.getTotalSizeInBytes()); +// assertEquals(incomingDocStats.getAverageSizeInBytes(), hostDocStats.getAverageSizeInBytes()); +// assertEquals(incomingDocStats.getDeleted(), hostDocStats.getDeleted()); +// }); +// } +// } +// } + +// public void testNodeIndicesStatsSerializationOnNewVersions() throws IOException { +// long numDocs = randomLongBetween(0, 10000); +// long numDeletedDocs = randomLongBetween(0, 100); +// String levelParam = randomFrom("node", "indices", "shards"); +// +// CommonStats commonStats = new CommonStats(CommonStatsFlags.NONE); +// +// commonStats.docs = new DocsStats(numDocs, numDeletedDocs, 0); +// commonStats.store = new StoreStats(100, 0L); +// commonStats.indexing = new IndexingStats(); +// +// CommonStatsFlags commonStatsFlags = new CommonStatsFlags(); +// commonStatsFlags.clear(); +// commonStatsFlags.set(CommonStatsFlags.Flag.Docs, true); +// commonStatsFlags.set(CommonStatsFlags.Flag.Store, true); +// commonStatsFlags.set(CommonStatsFlags.Flag.Indexing, true); +// commonStatsFlags.optimizeNodeIndicesStatsOnLevel(true); +// +// ArrayList level_arg = new ArrayList<>(); +// level_arg.add(levelParam); +// +// commonStatsFlags.setLevels(level_arg.toArray(new String[0])); +// +// Index newIndex = new Index("index", "_na_"); +// +// MockNodeIndicesStats mockNodeIndicesStats = generateMockNodeIndicesStats(commonStats, newIndex, commonStatsFlags); +// +// // To test out scenario when the incoming node stats response is from a node with an older ES Version. +// try (BytesStreamOutput out = new BytesStreamOutput()) { +// mockNodeIndicesStats.writeTo(out); +// try (StreamInput in = out.bytes().streamInput()) { +// MockNodeIndicesStats newNodeIndicesStats = new MockNodeIndicesStats(in); +// switch (levelParam) { +// case "node": +// assertNull(newNodeIndicesStats.getStatsByIndex()); +// assertNull(newNodeIndicesStats.getStatsByShard()); +// break; +// case "indices": +// assertNull(newNodeIndicesStats.getStatsByShard()); +// assertNotNull(newNodeIndicesStats.getStatsByIndex()); +// break; +// case "shards": +// assertNull(newNodeIndicesStats.getStatsByIndex()); +// assertNotNull(newNodeIndicesStats.getStatsByShard()); +// break; +// } +// } +// } +// } + +// public MockNodeIndicesStats generateMockNodeIndicesStats(CommonStats commonStats, Index index, CommonStatsFlags commonStatsFlags) { +// DiscoveryNode localNode = new DiscoveryNode("local", buildNewFakeTransportAddress(), Version.CURRENT); +// Map> statsByShard = new HashMap<>(); +// List indexShardStatsList = new ArrayList<>(); +// Index statsIndex = null; +// for (int i = 0; i < 2; i++) { +// ShardRoutingState shardRoutingState = ShardRoutingState.fromValue((byte) randomIntBetween(2, 3)); +// ShardRouting shardRouting = TestShardRouting.newShardRouting( +// index.getName(), +// i, +// localNode.getId(), +// randomBoolean(), +// shardRoutingState +// ); +// +// if (statsIndex == null) { +// statsIndex = shardRouting.shardId().getIndex(); +// } +// +// Path path = createTempDir().resolve("indices") +// .resolve(shardRouting.shardId().getIndex().getUUID()) +// .resolve(String.valueOf(shardRouting.shardId().id())); +// +// ShardStats shardStats = new ShardStats( +// shardRouting, +// new ShardPath(false, path, path, shardRouting.shardId()), +// commonStats, +// null, +// null, +// null +// ); +// IndexShardStats indexShardStats = new IndexShardStats(shardRouting.shardId(), new ShardStats[] { shardStats }); +// indexShardStatsList.add(indexShardStats); +// } +// +// statsByShard.put(statsIndex, indexShardStatsList); +// +// ClusterSettings clusterSettings = new ClusterSettings(Settings.EMPTY, ClusterSettings.BUILT_IN_CLUSTER_SETTINGS); +// +// if (commonStatsFlags.optimizeNodeIndicesStatsOnLevel()) { +// return new MockNodeIndicesStats( +// new CommonStats(commonStatsFlags), +// statsByShard, +// new SearchRequestStats(clusterSettings), +// commonStatsFlags.getLevels() +// ); +// } else { +// return new MockNodeIndicesStats(new CommonStats(commonStatsFlags), statsByShard, new SearchRequestStats(clusterSettings)); +// } +// } }