Class ThrottlingAllocationDecider

java.lang.Object
org.elasticsearch.cluster.routing.allocation.decider.AllocationDecider
org.elasticsearch.cluster.routing.allocation.decider.ThrottlingAllocationDecider

public class ThrottlingAllocationDecider extends AllocationDecider
ThrottlingAllocationDecider controls the recovery process per node in the cluster. It exposes two settings via the cluster update API that allow changes in real-time:
  • cluster.routing.allocation.node_initial_primaries_recoveries - restricts the number of initial primary shard recovery operations on a single node. The default is 4
  • cluster.routing.allocation.node_concurrent_recoveries - restricts the number of total concurrent shards initializing on a single node. The default is 2

If one of the above thresholds is exceeded per node this allocation decider will return Decision.THROTTLE as a hit to upstream logic to throttle the allocation process to prevent overloading nodes due to too many concurrent recovery processes.

  • Field Details

    • DEFAULT_CLUSTER_ROUTING_ALLOCATION_NODE_CONCURRENT_RECOVERIES

      public static final int DEFAULT_CLUSTER_ROUTING_ALLOCATION_NODE_CONCURRENT_RECOVERIES
      See Also:
    • DEFAULT_CLUSTER_ROUTING_ALLOCATION_NODE_INITIAL_PRIMARIES_RECOVERIES

      public static final int DEFAULT_CLUSTER_ROUTING_ALLOCATION_NODE_INITIAL_PRIMARIES_RECOVERIES
      See Also:
    • NAME

      public static final String NAME
      See Also:
    • CLUSTER_ROUTING_ALLOCATION_NODE_CONCURRENT_RECOVERIES_SETTING

      public static final Setting<Integer> CLUSTER_ROUTING_ALLOCATION_NODE_CONCURRENT_RECOVERIES_SETTING
    • CLUSTER_ROUTING_ALLOCATION_NODE_INITIAL_PRIMARIES_RECOVERIES_SETTING

      public static final Setting<Integer> CLUSTER_ROUTING_ALLOCATION_NODE_INITIAL_PRIMARIES_RECOVERIES_SETTING
    • CLUSTER_ROUTING_ALLOCATION_NODE_CONCURRENT_INCOMING_RECOVERIES_SETTING

      public static final Setting<Integer> CLUSTER_ROUTING_ALLOCATION_NODE_CONCURRENT_INCOMING_RECOVERIES_SETTING
    • CLUSTER_ROUTING_ALLOCATION_NODE_CONCURRENT_OUTGOING_RECOVERIES_SETTING

      public static final Setting<Integer> CLUSTER_ROUTING_ALLOCATION_NODE_CONCURRENT_OUTGOING_RECOVERIES_SETTING
  • Constructor Details

    • ThrottlingAllocationDecider

      public ThrottlingAllocationDecider(Settings settings, ClusterSettings clusterSettings)
  • Method Details

    • canAllocate

      public Decision canAllocate(ShardRouting shardRouting, RoutingNode node, RoutingAllocation allocation)
      Description copied from class: AllocationDecider
      Returns a Decision whether the given shard routing can be allocated on the given node. The default is Decision.ALWAYS.
      Overrides:
      canAllocate in class AllocationDecider
    • canForceAllocateDuringReplace

      public Decision canForceAllocateDuringReplace(ShardRouting shardRouting, RoutingNode node, RoutingAllocation allocation)
      Description copied from class: AllocationDecider
      Returns a Decision whether the given shard can be forced to the given node in the event that the shard's source node is being replaced. This allows nodes using a replace-type node shutdown to override certain deciders in the interest of moving the shard away from a node that *must* be removed. It defaults to returning "YES" and must be overridden by deciders that opt-out to having their other NO decisions *not* overridden while vacating. The caller is responsible for first checking: - that a replacement is ongoing - the shard routing's current node is the source of the replacement
      Overrides:
      canForceAllocateDuringReplace in class AllocationDecider