|  | @@ -20,6 +20,7 @@
 | 
											
												
													
														|  |  package org.elasticsearch.cluster.block;
 |  |  package org.elasticsearch.cluster.block;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  import com.carrotsearch.hppc.cursors.ObjectObjectCursor;
 |  |  import com.carrotsearch.hppc.cursors.ObjectObjectCursor;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |  import org.elasticsearch.cluster.AbstractDiffable;
 |  |  import org.elasticsearch.cluster.AbstractDiffable;
 | 
											
												
													
														|  |  import org.elasticsearch.cluster.Diff;
 |  |  import org.elasticsearch.cluster.Diff;
 | 
											
												
													
														|  |  import org.elasticsearch.cluster.metadata.IndexMetaData;
 |  |  import org.elasticsearch.cluster.metadata.IndexMetaData;
 | 
											
										
											
												
													
														|  | @@ -30,6 +31,7 @@ import org.elasticsearch.common.io.stream.StreamOutput;
 | 
											
												
													
														|  |  import org.elasticsearch.rest.RestStatus;
 |  |  import org.elasticsearch.rest.RestStatus;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  import java.io.IOException;
 |  |  import java.io.IOException;
 | 
											
												
													
														|  | 
 |  | +import java.util.EnumMap;
 | 
											
												
													
														|  |  import java.util.HashMap;
 |  |  import java.util.HashMap;
 | 
											
												
													
														|  |  import java.util.HashSet;
 |  |  import java.util.HashSet;
 | 
											
												
													
														|  |  import java.util.Map;
 |  |  import java.util.Map;
 | 
											
										
											
												
													
														|  | @@ -53,7 +55,7 @@ public class ClusterBlocks extends AbstractDiffable<ClusterBlocks> {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      private final ImmutableOpenMap<String, Set<ClusterBlock>> indicesBlocks;
 |  |      private final ImmutableOpenMap<String, Set<ClusterBlock>> indicesBlocks;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    private final ImmutableLevelHolder[] levelHolders;
 |  | 
 | 
											
												
													
														|  | 
 |  | +    private final EnumMap<ClusterBlockLevel, ImmutableLevelHolder> levelHolders;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      ClusterBlocks(Set<ClusterBlock> global, ImmutableOpenMap<String, Set<ClusterBlock>> indicesBlocks) {
 |  |      ClusterBlocks(Set<ClusterBlock> global, ImmutableOpenMap<String, Set<ClusterBlock>> indicesBlocks) {
 | 
											
												
													
														|  |          this.global = global;
 |  |          this.global = global;
 | 
											
										
											
												
													
														|  | @@ -70,20 +72,20 @@ public class ClusterBlocks extends AbstractDiffable<ClusterBlocks> {
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      public Set<ClusterBlock> global(ClusterBlockLevel level) {
 |  |      public Set<ClusterBlock> global(ClusterBlockLevel level) {
 | 
											
												
													
														|  | -        return levelHolders[level.ordinal()].global();
 |  | 
 | 
											
												
													
														|  | 
 |  | +        return levelHolders.get(level).global();
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      public ImmutableOpenMap<String, Set<ClusterBlock>> indices(ClusterBlockLevel level) {
 |  |      public ImmutableOpenMap<String, Set<ClusterBlock>> indices(ClusterBlockLevel level) {
 | 
											
												
													
														|  | -        return levelHolders[level.ordinal()].indices();
 |  | 
 | 
											
												
													
														|  | 
 |  | +        return levelHolders.get(level).indices();
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      private Set<ClusterBlock> blocksForIndex(ClusterBlockLevel level, String index) {
 |  |      private Set<ClusterBlock> blocksForIndex(ClusterBlockLevel level, String index) {
 | 
											
												
													
														|  |          return indices(level).getOrDefault(index, emptySet());
 |  |          return indices(level).getOrDefault(index, emptySet());
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    private static ImmutableLevelHolder[] generateLevelHolders(Set<ClusterBlock> global,
 |  | 
 | 
											
												
													
														|  | -                                                               ImmutableOpenMap<String, Set<ClusterBlock>> indicesBlocks) {
 |  | 
 | 
											
												
													
														|  | -        ImmutableLevelHolder[] levelHolders = new ImmutableLevelHolder[ClusterBlockLevel.values().length];
 |  | 
 | 
											
												
													
														|  | 
 |  | +    private static EnumMap<ClusterBlockLevel, ImmutableLevelHolder> generateLevelHolders(Set<ClusterBlock> global,
 | 
											
												
													
														|  | 
 |  | +            ImmutableOpenMap<String, Set<ClusterBlock>> indicesBlocks) {
 | 
											
												
													
														|  | 
 |  | +        EnumMap<ClusterBlockLevel, ImmutableLevelHolder> levelHolders = new EnumMap<>(ClusterBlockLevel.class);
 | 
											
												
													
														|  |          for (final ClusterBlockLevel level : ClusterBlockLevel.values()) {
 |  |          for (final ClusterBlockLevel level : ClusterBlockLevel.values()) {
 | 
											
												
													
														|  |              Predicate<ClusterBlock> containsLevel = block -> block.contains(level);
 |  |              Predicate<ClusterBlock> containsLevel = block -> block.contains(level);
 | 
											
												
													
														|  |              Set<ClusterBlock> newGlobal = unmodifiableSet(global.stream()
 |  |              Set<ClusterBlock> newGlobal = unmodifiableSet(global.stream()
 | 
											
										
											
												
													
														|  | @@ -96,8 +98,7 @@ public class ClusterBlocks extends AbstractDiffable<ClusterBlocks> {
 | 
											
												
													
														|  |                      .filter(containsLevel)
 |  |                      .filter(containsLevel)
 | 
											
												
													
														|  |                      .collect(toSet())));
 |  |                      .collect(toSet())));
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -            levelHolders[level.ordinal()] = new ImmutableLevelHolder(newGlobal, indicesBuilder.build());
 |  | 
 | 
											
												
													
														|  | 
 |  | +            levelHolders.put(level, new ImmutableLevelHolder(newGlobal, indicesBuilder.build()));
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |          return levelHolders;
 |  |          return levelHolders;
 | 
											
												
													
														|  |      }
 |  |      }
 |