@Override
  public synchronized void init() throws Exception {
    if (!initialized.get()) {
      Timer.Context timer = quotaMetrics.quotaManagerInitTime.time();
      try {
        for (QuotaEnforcer quotaEnforcer : quotaEnforcers) {
          quotaEnforcer.init();
        }
      } catch (Exception e) {
        LOGGER.error("Failed to init quotaEnforcer", e);
        throw e;
      } finally {
        timer.stop();
      }
      LOGGER.info("AmbryQuotaManager initialized.");
      initialized.set(true);
    } else {
      LOGGER.warn("AmbryQuotaManager already initialized.");
    }
  }
Constructor for {@link AmbryQuotaManager}.
@param quotaConfig {@link QuotaConfig} object.
@param quotaRecommendationMergePolicy {@link QuotaRecommendationMergePolicy} object that makes the overall recommendation.
@param accountService {@link AccountService} object to get all the accounts and container information.
@param accountStatsStore {@link AccountStatsStore} object to get all the account stats related information.
@param quotaMetrics {@link QuotaMetrics} object.
@param routerConfig {@link RouterConfig} object.
@throws ReflectiveOperationException in case of any exception.
ambry-quota/src/main/java/com/github/ambry/quota/AmbryQuotaManager.java