@Override public String toString() { return String.format(Locale.ROOT, "RateLimiter[stableRate=%3.1fqps]", getRate()); }
@Override public double getThrottleMarkDelete() { return this.markDeleteLimiter.getRate(); }
@Override public String toString() { return String.format(Locale.ROOT, "RateLimiter[stableRate=%3.1fqps]", getRate()); }
@Override public String toString() { return String.format(Locale.ROOT, "RateLimiter[stableRate=%3.1fqps]", getRate()); }
double previousRate = queryQuotaConfig.getRateLimiter().getRate(); if (Math.abs(latestRate - previousRate) > 0.001) { queryQuotaConfig.getRateLimiter().setRate(latestRate);
public void testSimpleRateUpdate() { RateLimiter limiter = RateLimiter.create(5.0, 5, SECONDS); assertEquals(5.0, limiter.getRate()); limiter.setRate(10.0); assertEquals(10.0, limiter.getRate()); try { limiter.setRate(0.0); fail(); } catch (IllegalArgumentException expected) { } try { limiter.setRate(-10.0); fail(); } catch (IllegalArgumentException expected) { } }
/** * Try to acquire token from rate limiter. Emit the utilization of the qps quota if broker metric isn't null. * @param tableNameWithType table name with type. * @param queryQuotaConfig query quota config for type-specific table. * @return true if there's no qps quota for that table, or a token is acquired successfully. */ private boolean tryAcquireToken(String tableNameWithType, QueryQuotaConfig queryQuotaConfig) { // Use hit counter to count the number of hits. queryQuotaConfig.getHitCounter().hit(); RateLimiter rateLimiter = queryQuotaConfig.getRateLimiter(); double perBrokerRate = rateLimiter.getRate(); // Emit the qps capacity utilization rate. int numHits = queryQuotaConfig.getHitCounter().getHitCount(); if (_brokerMetrics != null) { int percentageOfCapacityUtilization = (int) (numHits * 100 / perBrokerRate); LOGGER.debug("The percentage of rate limit capacity utilization is {}", percentageOfCapacityUtilization); _brokerMetrics.setValueOfTableGauge(tableNameWithType, BrokerGauge.QUERY_QUOTA_CAPACITY_UTILIZATION_RATE, percentageOfCapacityUtilization); } if (!rateLimiter.tryAcquire()) { LOGGER.info("Quota is exceeded for table: {}. Per-broker rate: {}. Current qps: {}", tableNameWithType, perBrokerRate, numHits); return false; } // Token is successfully acquired. return true; }
@Override public double getBackPressureRateLimit() { return rateLimiter.getRate(); }
public static double getReadSpeed() { if (rrl == null) return 0; else return rrl.getRate(); }
@Override public double getRate() { return rateLimiter.getRate(); } };
public static double getWriteSpeed() { if (wrl == null) return 0; else return wrl.getRate(); }
@Override public double getMaxMPS() { return mpsLimiter.getRate(); }
/** * Returns current QPS rate limit for the specified enumeration operation. * * @param operation for rate limit lookup * @return current configured rate limit for the operation */ public double getRate(T operation) { checkArgument(quotaMap.containsKey(operation), "undefined operation"); return quotaMap.get(operation).getRate(); }
private void mayUpdateThroughput(double limit, RateLimiter rateLimiter) { // if throughput is set to 0, throttling is disabled if (limit == 0) limit = Double.MAX_VALUE; if (rateLimiter.getRate() != limit) rateLimiter.setRate(limit); }
private void mayUpdateThroughput(double limit, RateLimiter rateLimiter) { // if throughput is set to 0, throttling is disabled if (limit == 0) limit = Double.MAX_VALUE; if (rateLimiter.getRate() != limit) rateLimiter.setRate(limit); }
public void reduceRate() { rateReductionsCount.incrementAndGet(); rateLimiter.setRate(Math.max(rateLimiter.getRate() / rateReductionFactor, minimalRate)); }
public void reduceRate() { rateReductionsCount.incrementAndGet(); rateLimiter.setRate(Math.max(rateLimiter.getRate() / rateReductionFactor, minimalRate)); }
//initially, create one zombie every 10 seconds final RateLimiter zombieRate = RateLimiter.create(0.1); Runnable increaseRate = new Runnable() { @Override public void run() { //increase rate by 20% zombieRate.setRate(zombieRate.getRate() * 1.2); } }; //then increase the rate every minute ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); scheduler.scheduleAtFixedRate(increaseRate, 1, 1, TimeUnit.MINUTES);
@Override public String toString() { return String.format("[host: %s, incoming rate: %.3f, outgoing rate: %.3f, rate limit: %.3f]", host, incomingRate.get(TimeUnit.SECONDS), outgoingRate.get(TimeUnit.SECONDS), rateLimiter.getRate()); } }
ExpiringRateLimiter updated(double newRate, Instant expirationTime) { // If only the expiration time is changing don't adjust the rate limiter if (_rateLimiter.getRate() == newRate) { return new ExpiringRateLimiter(_rateLimiter, expirationTime); } else { return new ExpiringRateLimiter(createRateLimiter(newRate), expirationTime); } } }