Skip to content

Commit d6d3fb3

Browse files
author
Christoph Büscher
authored
Use EnumMap in ClusterBlocks (#29112)
By using EnumMap instead of an ImmutableLevelHolder array we can avoid the using enum ordinals to index into the array.
1 parent edf27a5 commit d6d3fb3

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

server/src/main/java/org/elasticsearch/cluster/block/ClusterBlocks.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package org.elasticsearch.cluster.block;
2121

2222
import com.carrotsearch.hppc.cursors.ObjectObjectCursor;
23+
2324
import org.elasticsearch.cluster.AbstractDiffable;
2425
import org.elasticsearch.cluster.Diff;
2526
import org.elasticsearch.cluster.metadata.IndexMetaData;
@@ -30,6 +31,7 @@
3031
import org.elasticsearch.rest.RestStatus;
3132

3233
import java.io.IOException;
34+
import java.util.EnumMap;
3335
import java.util.HashMap;
3436
import java.util.HashSet;
3537
import java.util.Map;
@@ -53,7 +55,7 @@ public class ClusterBlocks extends AbstractDiffable<ClusterBlocks> {
5355

5456
private final ImmutableOpenMap<String, Set<ClusterBlock>> indicesBlocks;
5557

56-
private final ImmutableLevelHolder[] levelHolders;
58+
private final EnumMap<ClusterBlockLevel, ImmutableLevelHolder> levelHolders;
5759

5860
ClusterBlocks(Set<ClusterBlock> global, ImmutableOpenMap<String, Set<ClusterBlock>> indicesBlocks) {
5961
this.global = global;
@@ -70,20 +72,20 @@ public ImmutableOpenMap<String, Set<ClusterBlock>> indices() {
7072
}
7173

7274
public Set<ClusterBlock> global(ClusterBlockLevel level) {
73-
return levelHolders[level.ordinal()].global();
75+
return levelHolders.get(level).global();
7476
}
7577

7678
public ImmutableOpenMap<String, Set<ClusterBlock>> indices(ClusterBlockLevel level) {
77-
return levelHolders[level.ordinal()].indices();
79+
return levelHolders.get(level).indices();
7880
}
7981

8082
private Set<ClusterBlock> blocksForIndex(ClusterBlockLevel level, String index) {
8183
return indices(level).getOrDefault(index, emptySet());
8284
}
8385

84-
private static ImmutableLevelHolder[] generateLevelHolders(Set<ClusterBlock> global,
85-
ImmutableOpenMap<String, Set<ClusterBlock>> indicesBlocks) {
86-
ImmutableLevelHolder[] levelHolders = new ImmutableLevelHolder[ClusterBlockLevel.values().length];
86+
private static EnumMap<ClusterBlockLevel, ImmutableLevelHolder> generateLevelHolders(Set<ClusterBlock> global,
87+
ImmutableOpenMap<String, Set<ClusterBlock>> indicesBlocks) {
88+
EnumMap<ClusterBlockLevel, ImmutableLevelHolder> levelHolders = new EnumMap<>(ClusterBlockLevel.class);
8789
for (final ClusterBlockLevel level : ClusterBlockLevel.values()) {
8890
Predicate<ClusterBlock> containsLevel = block -> block.contains(level);
8991
Set<ClusterBlock> newGlobal = unmodifiableSet(global.stream()
@@ -96,8 +98,7 @@ private static ImmutableLevelHolder[] generateLevelHolders(Set<ClusterBlock> glo
9698
.filter(containsLevel)
9799
.collect(toSet())));
98100
}
99-
100-
levelHolders[level.ordinal()] = new ImmutableLevelHolder(newGlobal, indicesBuilder.build());
101+
levelHolders.put(level, new ImmutableLevelHolder(newGlobal, indicesBuilder.build()));
101102
}
102103
return levelHolders;
103104
}

0 commit comments

Comments
 (0)