public FilterAllocationDecider(Settings settings, ClusterSettings clusterSettings) {
   super(settings);
   setClusterRequireFilters(CLUSTER_ROUTING_REQUIRE_GROUP_SETTING.get(settings));
   setClusterExcludeFilters(CLUSTER_ROUTING_EXCLUDE_GROUP_SETTING.get(settings));
   setClusterIncludeFilters(CLUSTER_ROUTING_INCLUDE_GROUP_SETTING.get(settings));
   clusterSettings.addSettingsUpdateConsumer(
       CLUSTER_ROUTING_REQUIRE_GROUP_SETTING, this::setClusterRequireFilters);
   clusterSettings.addSettingsUpdateConsumer(
       CLUSTER_ROUTING_EXCLUDE_GROUP_SETTING, this::setClusterExcludeFilters);
   clusterSettings.addSettingsUpdateConsumer(
       CLUSTER_ROUTING_INCLUDE_GROUP_SETTING, this::setClusterIncludeFilters);
 }
 public ConcurrentRebalanceAllocationDecider(Settings settings, ClusterSettings clusterSettings) {
   super(settings);
   this.clusterConcurrentRebalance =
       CLUSTER_ROUTING_ALLOCATION_CLUSTER_CONCURRENT_REBALANCE_SETTING.get(settings);
   logger.debug("using [cluster_concurrent_rebalance] with [{}]", clusterConcurrentRebalance);
   clusterSettings.addSettingsUpdateConsumer(
       CLUSTER_ROUTING_ALLOCATION_CLUSTER_CONCURRENT_REBALANCE_SETTING,
       this::setClusterConcurrentRebalance);
 }
 @Inject
 public IndicesTTLService(
     Settings settings,
     ClusterService clusterService,
     IndicesService indicesService,
     ClusterSettings clusterSettings,
     TransportBulkAction bulkAction) {
   super(settings);
   this.clusterService = clusterService;
   this.indicesService = indicesService;
   TimeValue interval = INDICES_TTL_INTERVAL_SETTING.get(settings);
   this.bulkAction = bulkAction;
   this.bulkSize = this.settings.getAsInt("indices.ttl.bulk_size", 10000);
   this.purgerThread =
       new PurgerThread(EsExecutors.threadName(settings, "[ttl_expire]"), interval);
   clusterSettings.addSettingsUpdateConsumer(
       INDICES_TTL_INTERVAL_SETTING, this.purgerThread::resetInterval);
 }
  @Inject
  public RecoverySettings(Settings settings, ClusterSettings clusterSettings) {
    super(settings);

    this.retryDelayStateSync = INDICES_RECOVERY_RETRY_DELAY_STATE_SYNC_SETTING.get(settings);
    // doesn't have to be fast as nodes are reconnected every 10s by default (see
    // InternalClusterService.ReconnectToNodes)
    // and we want to give the master time to remove a faulty node
    this.retryDelayNetwork = INDICES_RECOVERY_RETRY_DELAY_NETWORK_SETTING.get(settings);

    this.internalActionTimeout = INDICES_RECOVERY_INTERNAL_ACTION_TIMEOUT_SETTING.get(settings);
    this.internalActionLongTimeout =
        INDICES_RECOVERY_INTERNAL_LONG_ACTION_TIMEOUT_SETTING.get(settings);

    this.activityTimeout = INDICES_RECOVERY_ACTIVITY_TIMEOUT_SETTING.get(settings);
    this.maxBytesPerSec = INDICES_RECOVERY_MAX_BYTES_PER_SEC_SETTING.get(settings);
    if (maxBytesPerSec.getBytes() <= 0) {
      rateLimiter = null;
    } else {
      rateLimiter = new SimpleRateLimiter(maxBytesPerSec.getMbFrac());
    }

    logger.debug("using max_bytes_per_sec[{}]", maxBytesPerSec);

    clusterSettings.addSettingsUpdateConsumer(
        INDICES_RECOVERY_MAX_BYTES_PER_SEC_SETTING, this::setMaxBytesPerSec);
    clusterSettings.addSettingsUpdateConsumer(
        INDICES_RECOVERY_RETRY_DELAY_STATE_SYNC_SETTING, this::setRetryDelayStateSync);
    clusterSettings.addSettingsUpdateConsumer(
        INDICES_RECOVERY_RETRY_DELAY_NETWORK_SETTING, this::setRetryDelayNetwork);
    clusterSettings.addSettingsUpdateConsumer(
        INDICES_RECOVERY_INTERNAL_ACTION_TIMEOUT_SETTING, this::setInternalActionTimeout);
    clusterSettings.addSettingsUpdateConsumer(
        INDICES_RECOVERY_INTERNAL_LONG_ACTION_TIMEOUT_SETTING, this::setInternalActionLongTimeout);
    clusterSettings.addSettingsUpdateConsumer(
        INDICES_RECOVERY_ACTIVITY_TIMEOUT_SETTING, this::setActivityTimeout);
  }