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;