You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by sh...@apache.org on 2016/11/04 06:29:24 UTC
kylin git commit: KYLIN-2130 QueryMetrics concurrent bug fix
Repository: kylin
Updated Branches:
refs/heads/v1.6.0-rc1 c19d8e917 -> 7ce1cb6f8
KYLIN-2130 QueryMetrics concurrent bug fix
Signed-off-by: shaofengshi <sh...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/7ce1cb6f
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/7ce1cb6f
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/7ce1cb6f
Branch: refs/heads/v1.6.0-rc1
Commit: 7ce1cb6f80d14a62adf4991e0116eef3ef021c2c
Parents: c19d8e9
Author: kangkaisen <ka...@live.com>
Authored: Tue Oct 25 10:49:39 2016 +0800
Committer: shaofengshi <sh...@apache.org>
Committed: Fri Nov 4 14:29:19 2016 +0800
----------------------------------------------------------------------
.../kylin/rest/metrics/QueryMetricsFacade.java | 38 +++++++++++++-------
1 file changed, 26 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/7ce1cb6f/server-base/src/main/java/org/apache/kylin/rest/metrics/QueryMetricsFacade.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/metrics/QueryMetricsFacade.java b/server-base/src/main/java/org/apache/kylin/rest/metrics/QueryMetricsFacade.java
index 91aff8b..48a8e58 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/metrics/QueryMetricsFacade.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/metrics/QueryMetricsFacade.java
@@ -18,6 +18,7 @@
package org.apache.kylin.rest.metrics;
+import org.apache.hadoop.metrics2.MetricsException;
import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem;
import org.apache.kylin.common.KylinConfig;
import org.apache.kylin.rest.request.SQLRequest;
@@ -38,28 +39,28 @@ public class QueryMetricsFacade {
private static boolean enabled = false;
private static ConcurrentHashMap<String, QueryMetrics> metricsMap = new ConcurrentHashMap<String, QueryMetrics>();
-
+
public static void init() {
enabled = KylinConfig.getInstanceFromEnv().getQueryMetricsEnabled();
if (!enabled)
return;
-
+
DefaultMetricsSystem.initialize("Kylin");
}
public static void updateMetrics(SQLRequest sqlRequest, SQLResponse sqlResponse) {
if (!enabled)
return;
-
+
String projectName = sqlRequest.getProject();
String cubeName = sqlResponse.getCube();
- update(getQueryMetrics("Server_Total", metricsMap), sqlResponse);
+ update(getQueryMetrics("Server_Total"), sqlResponse);
- update(getQueryMetrics(projectName, metricsMap), sqlResponse);
+ update(getQueryMetrics(projectName), sqlResponse);
String cubeMetricName = projectName + ",sub=" + cubeName;
- update(getQueryMetrics(cubeMetricName, metricsMap), sqlResponse);
+ update(getQueryMetrics(cubeMetricName), sqlResponse);
}
private static void update(QueryMetrics queryMetrics, SQLResponse sqlResponse) {
@@ -93,16 +94,29 @@ public class QueryMetricsFacade {
}
}
- private static QueryMetrics getQueryMetrics(String name, ConcurrentHashMap<String, QueryMetrics> metricsMap) {
+ private static QueryMetrics getQueryMetrics(String name) {
KylinConfig config = KylinConfig.getInstanceFromEnv();
int[] intervals = config.getQueryMetricsPercentilesIntervals();
- if (metricsMap.containsKey(name)) {
- return metricsMap.get(name);
- } else {
- QueryMetrics queryMetrics = new QueryMetrics(intervals).registerWith(name);
- metricsMap.put(name, queryMetrics);
+ QueryMetrics queryMetrics = metricsMap.get(name);
+ if (queryMetrics != null) {
return queryMetrics;
}
+
+ synchronized (QueryMetricsFacade.class) {
+ queryMetrics = metricsMap.get(name);
+ if (queryMetrics != null) {
+ return queryMetrics;
+ }
+
+ try {
+ queryMetrics = new QueryMetrics(intervals).registerWith(name);
+ metricsMap.put(name, queryMetrics);
+ return queryMetrics;
+ } catch (MetricsException e) {
+ logger.warn(name + " register error: ", e);
+ }
+ }
+ return queryMetrics;
}
}