Browse Source

Make Metadata extend AbstractCollection (#83791)

Artem Prigoda 3 years ago
parent
commit
f976414cf7

+ 7 - 1
server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java

@@ -54,6 +54,7 @@ import org.elasticsearch.xcontent.XContentFactory;
 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;
@@ -86,7 +87,7 @@ import static org.elasticsearch.common.settings.Settings.writeSettingsToStream;
  * The details of how this is persisted are covered in {@link org.elasticsearch.gateway.PersistedClusterStateService}.
  * </p>
  */
-public class Metadata implements Iterable<IndexMetadata>, Diffable<Metadata>, ToXContentFragment {
+public class Metadata extends AbstractCollection<IndexMetadata> implements Diffable<Metadata>, ToXContentFragment {
 
     private static final Logger logger = LogManager.getLogger(Metadata.class);
 
@@ -898,6 +899,11 @@ public class Metadata implements Iterable<IndexMetadata>, Diffable<Metadata>, To
         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;

+ 4 - 5
server/src/main/java/org/elasticsearch/rest/action/cat/RestIndicesAction.java

@@ -49,7 +49,6 @@ import java.util.Map;
 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 class RestIndicesAction extends AbstractCatAction {
                         .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
 
                     ClusterStateResponse stateResponse = extractResponse(responses, ClusterStateResponse.class);
-                    Map<String, IndexMetadata> indicesStates = StreamSupport.stream(
-                        stateResponse.getState().getMetadata().spliterator(),
-                        false
-                    ).collect(Collectors.toMap(indexMetadata -> indexMetadata.getIndex().getName(), Function.identity()));
+                    Map<String, IndexMetadata> indicesStates = stateResponse.getState()
+                        .getMetadata()
+                        .stream()
+                        .collect(Collectors.toMap(indexMetadata -> indexMetadata.getIndex().getName(), Function.identity()));
 
                     ClusterHealthResponse healthResponse = extractResponse(responses, ClusterHealthResponse.class);
                     Map<String, ClusterIndexHealth> indicesHealths = healthResponse.getIndices();

+ 3 - 2
x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/existence/FrozenExistenceDeciderService.java

@@ -25,7 +25,6 @@ import java.util.Collections;
 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 class FrozenExistenceDeciderService implements AutoscalingDeciderService
 
     @Override
     public AutoscalingDeciderResult scale(Settings configuration, AutoscalingDeciderContext context) {
-        List<String> indicesNeedingFrozen = StreamSupport.stream(context.state().metadata().spliterator(), false)
+        List<String> indicesNeedingFrozen = context.state()
+            .metadata()
+            .stream()
             .filter(this::needsTier)
             .map(imd -> imd.getIndex().getName())
             .limit(10)

+ 1 - 2
x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/shards/FrozenShardsDeciderService.java

@@ -25,7 +25,6 @@ import org.elasticsearch.xpack.autoscaling.util.FrozenUtils;
 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 class FrozenShardsDeciderService implements AutoscalingDeciderService {
     }
 
     static int countFrozenShards(Metadata metadata) {
-        return StreamSupport.stream(metadata.spliterator(), false)
+        return metadata.stream()
             .filter(imd -> FrozenUtils.isFrozenIndex(imd.getSettings()))
             .mapToInt(IndexMetadata::getTotalNumberOfShards)
             .sum();

+ 1 - 2
x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/storage/FrozenStorageDeciderService.java

@@ -26,7 +26,6 @@ import org.elasticsearch.xpack.autoscaling.util.FrozenUtils;
 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 class FrozenStorageDeciderService implements AutoscalingDeciderService {
     @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();

+ 4 - 3
x-pack/plugin/searchable-snapshots/src/main/java/org/elasticsearch/xpack/searchablesnapshots/upgrade/SearchableSnapshotIndexMetadataUpgrader.java

@@ -24,7 +24,6 @@ import org.elasticsearch.threadpool.ThreadPool;
 
 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 class SearchableSnapshotIndexMetadataUpgrader {
     }
 
     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 @@ public class SearchableSnapshotIndexMetadataUpgrader {
             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)
             )

+ 1 - 3
x-pack/plugin/searchable-snapshots/src/test/java/org/elasticsearch/xpack/searchablesnapshots/upgrade/SearchableSnapshotIndexMetadataUpgraderTests.java

@@ -19,8 +19,6 @@ import org.elasticsearch.snapshots.SearchableSnapshotsSettings;
 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 class SearchableSnapshotIndexMetadataUpgraderTests extends ESTestCase {
         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