@Override
  public QuotaMode getQuotaMode() {
    return quotaMode;
  }
{@inheritDoc}

This implementation does check and charge in two phases.
In the first phase, it obtains recommendations from all the {@link QuotaEnforcer}s and uses the recommendations (in
conjunction with the parameters) to determine if the request should be charged. Any exception from any
{@link QuotaEnforcer}s in this phase are bubbled up to the caller and no charge is made.

In the second phase, after it has determined that the charge needs to be done, it attempts to charge the individual
{@link QuotaEnforcer}s one by one. The behavior in this phase is to make a best effort to charge as many
{@link QuotaEnforcer}s as possible and send a {@link QuotaAction#ALLOW} recommendation. If there is an exception in
any {@link QuotaEnforcer#charge} call, that exception is logged and charge is still attempted for rest of the
{@link QuotaEnforcer}s. As such, there is a potential for partial charge to happen in this implementation.
ambry-quota/src/main/java/com/github/ambry/quota/AmbryQuotaManager.java