Class ShardLimitValidator

java.lang.Object
org.elasticsearch.indices.ShardLimitValidator

public class ShardLimitValidator extends Object
This class contains the logic used to check the cluster-wide shard limit before shards are created and ensuring that the limit is updated correctly on setting updates, etc. NOTE: This is the limit applied at *shard creation time*. If you are looking for the limit applied at *allocation* time, which is controlled by a different setting, see ShardsLimitAllocationDecider.
  • Field Details

    • SETTING_CLUSTER_MAX_SHARDS_PER_NODE

      public static final Setting<Integer> SETTING_CLUSTER_MAX_SHARDS_PER_NODE
    • SETTING_CLUSTER_MAX_SHARDS_PER_NODE_FROZEN

      public static final Setting<Integer> SETTING_CLUSTER_MAX_SHARDS_PER_NODE_FROZEN
    • FROZEN_GROUP

      public static final String FROZEN_GROUP
      See Also:
    • NORMAL_GROUP

      public static final String NORMAL_GROUP
      See Also:
    • INDEX_SETTING_SHARD_LIMIT_GROUP

      public static final Setting<String> INDEX_SETTING_SHARD_LIMIT_GROUP
    • shardLimitPerNode

      protected final AtomicInteger shardLimitPerNode
    • shardLimitPerNodeFrozen

      protected final AtomicInteger shardLimitPerNodeFrozen
  • Constructor Details

  • Method Details

    • getShardLimitPerNode

      public static int getShardLimitPerNode(ShardLimitValidator.LimitGroup limitGroup, HealthMetadata.ShardLimits shardLimits)
    • validateShardLimit

      public void validateShardLimit(Settings settings, DiscoveryNodes discoveryNodes, Metadata metadata)
      Checks whether an index can be created without going over the cluster shard limit.
      Parameters:
      settings - the settings of the index to be created
      discoveryNodes - the nodes in the cluster
      metadata - the cluster state metadata
      Throws:
      ValidationException - if creating this index would put the cluster over the cluster shard limit
    • validateShardLimit

      public void validateShardLimit(DiscoveryNodes discoveryNodes, Metadata metadata, Index[] indicesToOpen)
      Validates whether a list of indices can be opened without going over the cluster shard limit. Only counts indices which are currently closed and will be opened, ignores indices which are already open.
      Parameters:
      discoveryNodes - The nodes in the cluster
      metadata - The cluster state metadata
      indicesToOpen - The indices which are to be opened.
      Throws:
      ValidationException - If this operation would take the cluster over the limit and enforcement is enabled.
    • validateShardLimitOnReplicaUpdate

      public void validateShardLimitOnReplicaUpdate(DiscoveryNodes discoveryNodes, Metadata metadata, Index[] indices, int replicas)
    • applicableLimitGroups

      public static List<ShardLimitValidator.LimitGroup> applicableLimitGroups(boolean isStateless)