Skip to content

Commit d6fe260

Browse files
authored
Optimize IndexTemplateRegistry#clusterChanged (#115347) (#115366)
1 parent 10f711d commit d6fe260

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

server/src/main/java/org/elasticsearch/cluster/metadata/ComposableIndexTemplate.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
import org.elasticsearch.xcontent.XContentParser;
2929

3030
import java.io.IOException;
31+
import java.util.ArrayList;
32+
import java.util.Collections;
3133
import java.util.List;
3234
import java.util.Map;
3335
import java.util.Objects;
@@ -189,9 +191,14 @@ public List<String> getRequiredComponentTemplates() {
189191
if (ignoreMissingComponentTemplates == null) {
190192
return componentTemplates;
191193
}
192-
return componentTemplates.stream()
193-
.filter(componentTemplate -> ignoreMissingComponentTemplates.contains(componentTemplate) == false)
194-
.toList();
194+
// note: this loop is unrolled rather than streaming-style because it's hot enough to show up in a flamegraph
195+
List<String> required = new ArrayList<>(componentTemplates.size());
196+
for (String template : componentTemplates) {
197+
if (ignoreMissingComponentTemplates.contains(template) == false) {
198+
required.add(template);
199+
}
200+
}
201+
return Collections.unmodifiableList(required);
195202
}
196203

197204
@Nullable

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ilm/IndexLifecycleMetadata.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.io.IOException;
2626
import java.util.Collections;
2727
import java.util.EnumSet;
28+
import java.util.HashMap;
2829
import java.util.Iterator;
2930
import java.util.List;
3031
import java.util.Map;
@@ -92,10 +93,13 @@ public OperationMode getOperationMode() {
9293
}
9394

9495
public Map<String, LifecyclePolicy> getPolicies() {
95-
return policyMetadatas.values()
96-
.stream()
97-
.map(LifecyclePolicyMetadata::getPolicy)
98-
.collect(Collectors.toMap(LifecyclePolicy::getName, Function.identity()));
96+
// note: this loop is unrolled rather than streaming-style because it's hot enough to show up in a flamegraph
97+
Map<String, LifecyclePolicy> policies = new HashMap<>(policyMetadatas.size());
98+
for (LifecyclePolicyMetadata policyMetadata : policyMetadatas.values()) {
99+
LifecyclePolicy policy = policyMetadata.getPolicy();
100+
policies.put(policy.getName(), policy);
101+
}
102+
return Collections.unmodifiableMap(policies);
99103
}
100104

101105
@Override

0 commit comments

Comments
 (0)