@Override
  public void onConfigurationChange(Configuration conf) {
    final int newMaxStoreFileRefCount = getMaxStoreFileRefCount(conf);
    final int newRegionsRecoveryInterval = getRegionsRecoveryChoreInterval(conf);

    if (
      prevMaxStoreFileRefCount == newMaxStoreFileRefCount
        && prevRegionsRecoveryInterval == newRegionsRecoveryInterval
    ) {
      // no need to re-schedule the chore with updated config
      // as there is no change in desired configs
      return;
    }

    LOG.info(
      "Config Reload for RegionsRecovery Chore. prevMaxStoreFileRefCount: {},"
        + " newMaxStoreFileRefCount: {}, prevRegionsRecoveryInterval: {}, "
        + "newRegionsRecoveryInterval: {}",
      prevMaxStoreFileRefCount, newMaxStoreFileRefCount, prevRegionsRecoveryInterval,
      newRegionsRecoveryInterval);

    RegionsRecoveryChore regionsRecoveryChore =
      new RegionsRecoveryChore(this.hMaster, conf, this.hMaster);
    ChoreService choreService = this.hMaster.getChoreService();

    // Regions Reopen based on very high storeFileRefCount is considered enabled
    // only if hbase.regions.recovery.store.file.ref.count has value > 0
    synchronized (this) {
      if (chore != null) {
        chore.shutdown();
        chore = null;
      }
      if (newMaxStoreFileRefCount > 0) {
        // schedule the new chore
        choreService.scheduleChore(regionsRecoveryChore);
        chore = regionsRecoveryChore;
      }
      this.prevMaxStoreFileRefCount = newMaxStoreFileRefCount;
      this.prevRegionsRecoveryInterval = newRegionsRecoveryInterval;
    }
  }
Config manager for RegionsRecovery Chore - Dynamically reload config and update chore accordingly
hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionsRecoveryConfigManager.java