summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/searchers
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahoo-inc.com>2016-11-03 15:28:10 +0100
committerArne H Juul <arnej@yahoo-inc.com>2016-11-03 15:28:10 +0100
commit6be16d1ac0b82b11a6aca46cd0285112c8fec8e5 (patch)
treecfa69b62b0064b5a0b1cb2584e4d3a11e8eca375 /container-search/src/main/java/com/yahoo/search/searchers
parent49b4b33db07d2e8595a8f8c71f42a0a3d0dcaeec (diff)
convert RateLimitingSearcher to use simplemetrics
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/searchers')
-rwxr-xr-xcontainer-search/src/main/java/com/yahoo/search/searchers/RateLimitingSearcher.java27
1 files changed, 17 insertions, 10 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/searchers/RateLimitingSearcher.java b/container-search/src/main/java/com/yahoo/search/searchers/RateLimitingSearcher.java
index 95cec1d0960..00157f0e251 100755
--- a/container-search/src/main/java/com/yahoo/search/searchers/RateLimitingSearcher.java
+++ b/container-search/src/main/java/com/yahoo/search/searchers/RateLimitingSearcher.java
@@ -3,7 +3,11 @@ package com.yahoo.search.searchers;
import com.google.inject.Inject;
import com.yahoo.cloud.config.ClusterInfoConfig;
-import com.yahoo.jdisc.Metric;
+
+import com.yahoo.metrics.simple.MetricReceiver;
+import com.yahoo.metrics.simple.Counter;
+import com.yahoo.metrics.simple.Point;
+
import com.yahoo.processing.request.CompoundName;
import com.yahoo.search.Query;
import com.yahoo.search.Result;
@@ -69,7 +73,7 @@ public class RateLimitingSearcher extends Searcher {
private final ThreadLocal<Map<String, Double>> allocatedCapacity = new ThreadLocal<>();
/** For emitting metrics */
- private final Metric metric;
+ private final Counter overQuotaCounter;
/**
* How much capacity to allocate to a thread each time it runs out.
@@ -81,19 +85,19 @@ public class RateLimitingSearcher extends Searcher {
private final double recheckForCapacityProbability;
@Inject
- public RateLimitingSearcher(RateLimitingConfig rateLimitingConfig, ClusterInfoConfig clusterInfoConfig, Metric metric) {
+ public RateLimitingSearcher(RateLimitingConfig rateLimitingConfig, ClusterInfoConfig clusterInfoConfig, MetricReceiver metric) {
this(rateLimitingConfig, clusterInfoConfig, metric, Clock.systemUTC());
}
/** For testing - allows injection of a timer to avoid depending on the system clock */
- public RateLimitingSearcher(RateLimitingConfig rateLimitingConfig, ClusterInfoConfig clusterInfoConfig, Metric metric, Clock clock) {
+ public RateLimitingSearcher(RateLimitingConfig rateLimitingConfig, ClusterInfoConfig clusterInfoConfig, MetricReceiver metric, Clock clock) {
this.capacityIncrement = rateLimitingConfig.capacityIncrement();
this.recheckForCapacityProbability = rateLimitingConfig.recheckForCapacityProbability();
this.availableCapacity = new AvailableCapacity(rateLimitingConfig.maxAvailableCapacity(), clock);
this.nodeCount = clusterInfoConfig.nodeCount();
- this.metric = metric;
+ this.overQuotaCounter = metric.declareCounter(requestsOverQuotaMetricName);
}
@Override
@@ -119,7 +123,12 @@ public class RateLimitingSearcher extends Searcher {
}
if (rate==0 || getAllocatedCapacity(id) <= 0) { // we are still over rate: reject
- metric.add(requestsOverQuotaMetricName, 1, createContext(query.properties().getString(idDimensionKey, ""), id));
+ String idDim = query.properties().getString(idDimensionKey, null);
+ if (idDim == null) {
+ overQuotaCounter.add(1);
+ } else {
+ overQuotaCounter.add(1, createContext(idDim, id));
+ }
if ( ! query.properties().getBoolean(dryRunKey, false))
return new Result(query, new ErrorMessage(429, "Too many requests", "Allowed rate: " + rate + "/s"));
}
@@ -133,10 +142,8 @@ public class RateLimitingSearcher extends Searcher {
return result;
}
- private Metric.Context createContext(String dimensionName, String dimensionValue) {
- if (dimensionName.isEmpty())
- return metric.createContext(Collections.emptyMap());
- return metric.createContext(Collections.singletonMap(dimensionName, dimensionValue));
+ private Point createContext(String dimensionName, String dimensionValue) {
+ return overQuotaCounter.builder().set(dimensionName, dimensionValue).build();
}
private double getAllocatedCapacity(String id) {