@Override
  public QuotaRecommendation charge(RestRequest restRequest, Map<QuotaName, Double> requestCostMap) {
    if (!RestUtils.isUploadRequest(restRequest)) {
      return null;
    }
    if (!requestCostMap.containsKey(QuotaName.STORAGE_IN_GB)) {
      // No cost for the desired QuotaName, then just call recommend
      return null;
    }

    // The cost is number of bytes in GB. Convert it back to raw number.
    long cost = (long) (requestCostMap.get(QuotaName.STORAGE_IN_GB).doubleValue() * BYTES_IN_GB);
    Pair<Long, Long> pair = charge(restRequest, cost);
    return recommendBasedOnQuotaAndUsage(pair);
  }
Constructor to instantiate a new {@link StorageQuotaEnforcer}.
@param storageQuotaConfig the {@link StorageQuotaConfig}.
@param quotaSource the {@link QuotaSource} to get the quota.
@param storageUsageRefresher the {@link StorageUsageRefresher} to refresh the storage usage for each container.
@throws Exception
ambry-quota/src/main/java/com/github/ambry/quota/storage/StorageQuotaEnforcer.java