From 86305e0e24866410595d3bfd8cb80503689a56e3 Mon Sep 17 00:00:00 2001 From: Artem Prigoda Date: Thu, 10 Feb 2022 15:23:31 +0100 Subject: [PATCH 1/2] Make Metadata extend AbstractCollection So we can get a direct optimized `stream` on it. --- .../org/elasticsearch/cluster/metadata/Metadata.java | 9 ++++++++- .../elasticsearch/rest/action/cat/RestIndicesAction.java | 9 ++++----- .../existence/FrozenExistenceDeciderService.java | 5 +++-- .../autoscaling/shards/FrozenShardsDeciderService.java | 3 +-- .../autoscaling/storage/FrozenStorageDeciderService.java | 3 +-- .../upgrade/SearchableSnapshotIndexMetadataUpgrader.java | 7 ++++--- .../SearchableSnapshotIndexMetadataUpgraderTests.java | 4 +--- 7 files changed, 22 insertions(+), 18 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java b/server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java index 41f13470fbec2..77b3ca21a0049 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java @@ -54,6 +54,7 @@ import org.elasticsearch.xcontent.XContentParser; import java.io.IOException; +import java.util.AbstractCollection; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -69,6 +70,7 @@ import java.util.Optional; import java.util.Set; import java.util.SortedMap; +import java.util.Spliterator; import java.util.TreeMap; import java.util.function.BiPredicate; import java.util.function.Consumer; @@ -86,7 +88,7 @@ * The details of how this is persisted are covered in {@link org.elasticsearch.gateway.PersistedClusterStateService}. *

*/ -public class Metadata implements Iterable, Diffable, ToXContentFragment { +public class Metadata extends AbstractCollection implements Diffable, ToXContentFragment { private static final Logger logger = LogManager.getLogger(Metadata.class); @@ -869,6 +871,11 @@ public Iterator iterator() { return indices.valuesIt(); } + @Override + public int size() { + return indices.size(); + } + public static boolean isGlobalStateEquals(Metadata metadata1, Metadata metadata2) { if (metadata1.coordinationMetadata.equals(metadata2.coordinationMetadata) == false) { return false; diff --git a/server/src/main/java/org/elasticsearch/rest/action/cat/RestIndicesAction.java b/server/src/main/java/org/elasticsearch/rest/action/cat/RestIndicesAction.java index 204aa3b6f002f..e6a85f30b76aa 100644 --- a/server/src/main/java/org/elasticsearch/rest/action/cat/RestIndicesAction.java +++ b/server/src/main/java/org/elasticsearch/rest/action/cat/RestIndicesAction.java @@ -49,7 +49,6 @@ import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; -import java.util.stream.StreamSupport; import static java.util.Arrays.asList; import static org.elasticsearch.action.support.master.MasterNodeRequest.DEFAULT_MASTER_NODE_TIMEOUT; @@ -229,10 +228,10 @@ public void onResponse(final Collection responses) { .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); ClusterStateResponse stateResponse = extractResponse(responses, ClusterStateResponse.class); - Map indicesStates = StreamSupport.stream( - stateResponse.getState().getMetadata().spliterator(), - false - ).collect(Collectors.toMap(indexMetadata -> indexMetadata.getIndex().getName(), Function.identity())); + Map indicesStates = stateResponse.getState() + .getMetadata() + .stream() + .collect(Collectors.toMap(indexMetadata -> indexMetadata.getIndex().getName(), Function.identity())); ClusterHealthResponse healthResponse = extractResponse(responses, ClusterHealthResponse.class); Map indicesHealths = healthResponse.getIndices(); diff --git a/x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/existence/FrozenExistenceDeciderService.java b/x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/existence/FrozenExistenceDeciderService.java index dd534dfd40915..6b1035c9b7b23 100644 --- a/x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/existence/FrozenExistenceDeciderService.java +++ b/x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/existence/FrozenExistenceDeciderService.java @@ -25,7 +25,6 @@ import java.util.List; import java.util.Objects; import java.util.stream.Collectors; -import java.util.stream.StreamSupport; /** * This decider looks at all indices and ensures a minimum capacity is available if any indices are in the frozen ILM phase, since that @@ -45,7 +44,9 @@ public String name() { @Override public AutoscalingDeciderResult scale(Settings configuration, AutoscalingDeciderContext context) { - List indicesNeedingFrozen = StreamSupport.stream(context.state().metadata().spliterator(), false) + List indicesNeedingFrozen = context.state() + .metadata() + .stream() .filter(this::needsTier) .map(imd -> imd.getIndex().getName()) .limit(10) diff --git a/x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/shards/FrozenShardsDeciderService.java b/x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/shards/FrozenShardsDeciderService.java index 9d405593bb4bb..18044de7b5954 100644 --- a/x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/shards/FrozenShardsDeciderService.java +++ b/x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/shards/FrozenShardsDeciderService.java @@ -25,7 +25,6 @@ import java.io.IOException; import java.util.List; import java.util.Objects; -import java.util.stream.StreamSupport; /** * This decider enforces that on a 64GB memory node (31GB heap) we can max have 2000 shards. We arrive at 2000 because our current limit is @@ -58,7 +57,7 @@ public AutoscalingDeciderResult scale(Settings configuration, AutoscalingDecider } static int countFrozenShards(Metadata metadata) { - return StreamSupport.stream(metadata.spliterator(), false) + return metadata.stream() .filter(imd -> FrozenUtils.isFrozenIndex(imd.getSettings())) .mapToInt(IndexMetadata::getTotalNumberOfShards) .sum(); diff --git a/x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/storage/FrozenStorageDeciderService.java b/x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/storage/FrozenStorageDeciderService.java index dbaa812c5eafc..5c96e9029c530 100644 --- a/x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/storage/FrozenStorageDeciderService.java +++ b/x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/storage/FrozenStorageDeciderService.java @@ -26,7 +26,6 @@ import java.io.IOException; import java.util.List; import java.util.Objects; -import java.util.stream.StreamSupport; public class FrozenStorageDeciderService implements AutoscalingDeciderService { public static final String NAME = "frozen_storage"; @@ -42,7 +41,7 @@ public String name() { @Override public AutoscalingDeciderResult scale(Settings configuration, AutoscalingDeciderContext context) { Metadata metadata = context.state().metadata(); - long dataSetSize = StreamSupport.stream(metadata.spliterator(), false) + long dataSetSize = metadata.stream() .filter(imd -> FrozenUtils.isFrozenIndex(imd.getSettings())) .mapToLong(imd -> estimateSize(imd, context.info())) .sum(); diff --git a/x-pack/plugin/searchable-snapshots/src/main/java/org/elasticsearch/xpack/searchablesnapshots/upgrade/SearchableSnapshotIndexMetadataUpgrader.java b/x-pack/plugin/searchable-snapshots/src/main/java/org/elasticsearch/xpack/searchablesnapshots/upgrade/SearchableSnapshotIndexMetadataUpgrader.java index 29a05f4607f98..41810789e0646 100644 --- a/x-pack/plugin/searchable-snapshots/src/main/java/org/elasticsearch/xpack/searchablesnapshots/upgrade/SearchableSnapshotIndexMetadataUpgrader.java +++ b/x-pack/plugin/searchable-snapshots/src/main/java/org/elasticsearch/xpack/searchablesnapshots/upgrade/SearchableSnapshotIndexMetadataUpgrader.java @@ -24,7 +24,6 @@ import java.util.concurrent.Executor; import java.util.concurrent.atomic.AtomicBoolean; -import java.util.stream.StreamSupport; /** * This class upgrades frozen indices to apply the index.shard_limit.group=frozen setting after all nodes have been upgraded to 7.13+ @@ -91,7 +90,8 @@ public void onFailure(Exception e) { } static boolean needsUpgrade(ClusterState state) { - return StreamSupport.stream(state.metadata().spliterator(), false) + return state.metadata() + .stream() .filter( imd -> imd.getCompatibilityVersion().onOrAfter(Version.V_7_12_0) && imd.getCompatibilityVersion().before(Version.V_8_0_0) ) @@ -105,7 +105,8 @@ static ClusterState upgradeIndices(ClusterState currentState) { return currentState; } Metadata.Builder builder = Metadata.builder(currentState.metadata()); - StreamSupport.stream(currentState.metadata().spliterator(), false) + currentState.metadata() + .stream() .filter( imd -> imd.getCompatibilityVersion().onOrAfter(Version.V_7_12_0) && imd.getCompatibilityVersion().before(Version.V_8_0_0) ) diff --git a/x-pack/plugin/searchable-snapshots/src/test/java/org/elasticsearch/xpack/searchablesnapshots/upgrade/SearchableSnapshotIndexMetadataUpgraderTests.java b/x-pack/plugin/searchable-snapshots/src/test/java/org/elasticsearch/xpack/searchablesnapshots/upgrade/SearchableSnapshotIndexMetadataUpgraderTests.java index 6571f46cb1fd3..5430d039c3eb8 100644 --- a/x-pack/plugin/searchable-snapshots/src/test/java/org/elasticsearch/xpack/searchablesnapshots/upgrade/SearchableSnapshotIndexMetadataUpgraderTests.java +++ b/x-pack/plugin/searchable-snapshots/src/test/java/org/elasticsearch/xpack/searchablesnapshots/upgrade/SearchableSnapshotIndexMetadataUpgraderTests.java @@ -19,8 +19,6 @@ import org.elasticsearch.test.ESTestCase; import org.elasticsearch.test.VersionUtils; -import java.util.stream.StreamSupport; - import static org.elasticsearch.snapshots.SearchableSnapshotsSettings.SEARCHABLE_SNAPSHOT_STORE_TYPE; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; @@ -71,7 +69,7 @@ public void testUpgradeIndices() { assertThat(upgradedState, not(sameInstance(originalState))); assertThat(upgradedState.metadata().indices().size(), equalTo(originalState.metadata().indices().size())); - assertTrue(StreamSupport.stream(upgradedState.metadata().spliterator(), false).anyMatch(upgraded -> { + assertTrue(upgradedState.metadata().stream().anyMatch(upgraded -> { IndexMetadata original = originalState.metadata().index(upgraded.getIndex()); assertThat(original, notNullValue()); if (upgraded.isPartialSearchableSnapshot() == false From 6186da8f482c75e92fb61d4aba917209ad38fc9a Mon Sep 17 00:00:00 2001 From: Artem Prigoda Date: Mon, 14 Feb 2022 10:48:58 +0100 Subject: [PATCH 2/2] Remove unused import --- .../main/java/org/elasticsearch/cluster/metadata/Metadata.java | 1 - 1 file changed, 1 deletion(-) diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java b/server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java index 6f39199d4704c..2531ee686ae50 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java @@ -70,7 +70,6 @@ import java.util.Optional; import java.util.Set; import java.util.SortedMap; -import java.util.Spliterator; import java.util.TreeMap; import java.util.function.BiPredicate; import java.util.function.Consumer;