You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ke...@apache.org on 2020/01/29 09:04:02 UTC

[skywalking] branch master updated: Refactor the storage to support `getSubsetOfMultipleLinearIntValues` (#4289)

This is an automated email from the ASF dual-hosted git repository.

kezhenxu94 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new 17e3fff  Refactor the storage to support `getSubsetOfMultipleLinearIntValues` (#4289)
17e3fff is described below

commit 17e3fff83a14776c864cd3bc8a1e7c5c62607169
Author: 吴晟 Wu Sheng <wu...@foxmail.com>
AuthorDate: Wed Jan 29 17:03:39 2020 +0800

    Refactor the storage to support `getSubsetOfMultipleLinearIntValues` (#4289)
---
 .../oap/server/core/query/MetricQueryService.java  | 17 +++++++++++--
 .../core/storage/query/IMetricsQueryDAO.java       | 18 +++++++++-----
 .../oap/query/graphql/resolver/MetricQuery.java    | 28 +++++++++++++++++-----
 .../src/main/resources/query-protocol              |  2 +-
 .../elasticsearch/query/MetricsQueryEsDAO.java     |  9 +++----
 .../plugin/jdbc/h2/dao/H2MetricsQueryDAO.java      |  9 +++----
 6 files changed, 60 insertions(+), 23 deletions(-)

diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetricQueryService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetricQueryService.java
index 8636edc..d2cb9af 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetricQueryService.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetricQueryService.java
@@ -100,6 +100,19 @@ public class MetricQueryService implements Service {
         final Downsampling downsampling,
         final long startTB,
         final long endTB) throws IOException {
+        List<Integer> linearIndex = new ArrayList<>(numOfLinear);
+        for (int i = 0; i < numOfLinear; i++) {
+            linearIndex.add(i);
+        }
+
+        return getSubsetOfMultipleLinearIntValues(indName, id, linearIndex, downsampling, startTB, endTB);
+    }
+
+    public List<IntValues> getSubsetOfMultipleLinearIntValues(final String indName, final String id,
+        final List<Integer> linearIndex,
+        final Downsampling downsampling,
+        final long startTB,
+        final long endTB) throws IOException {
         List<DurationPoint> durationPoints = DurationUtils.INSTANCE.getDurationPoints(downsampling, startTB, endTB);
         List<String> ids = new ArrayList<>();
         if (StringUtil.isEmpty(id)) {
@@ -108,9 +121,9 @@ public class MetricQueryService implements Service {
             durationPoints.forEach(durationPoint -> ids.add(durationPoint.getPoint() + Const.ID_SPLIT + id));
         }
 
-        IntValues[] multipleLinearIntValues = getMetricQueryDAO().getMultipleLinearIntValues(indName, downsampling, ids, numOfLinear, ValueColumnIds.INSTANCE.getValueCName(indName));
+        IntValues[] multipleLinearIntValues = getMetricQueryDAO().getMultipleLinearIntValues(indName, downsampling, ids, linearIndex, ValueColumnIds.INSTANCE.getValueCName(indName));
 
-        List<IntValues> response = new ArrayList<>(numOfLinear);
+        List<IntValues> response = new ArrayList<>(linearIndex.size());
         Collections.addAll(response, multipleLinearIntValues);
         return response;
     }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IMetricsQueryDAO.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IMetricsQueryDAO.java
index c10aafa..512ac58 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IMetricsQueryDAO.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IMetricsQueryDAO.java
@@ -21,8 +21,10 @@ package org.apache.skywalking.oap.server.core.storage.query;
 import java.io.IOException;
 import java.util.List;
 import org.apache.skywalking.oap.server.core.analysis.Downsampling;
-import org.apache.skywalking.oap.server.core.query.entity.*;
-import org.apache.skywalking.oap.server.core.query.sql.*;
+import org.apache.skywalking.oap.server.core.query.entity.IntValues;
+import org.apache.skywalking.oap.server.core.query.entity.Thermodynamic;
+import org.apache.skywalking.oap.server.core.query.sql.Function;
+import org.apache.skywalking.oap.server.core.query.sql.Where;
 import org.apache.skywalking.oap.server.core.storage.DAO;
 
 /**
@@ -30,11 +32,15 @@ import org.apache.skywalking.oap.server.core.storage.DAO;
  */
 public interface IMetricsQueryDAO extends DAO {
 
-    IntValues getValues(String indName, Downsampling downsampling, long startTB, long endTB, Where where, String valueCName, Function function) throws IOException;
+    IntValues getValues(String indName, Downsampling downsampling, long startTB, long endTB, Where where,
+        String valueCName, Function function) throws IOException;
 
-    IntValues getLinearIntValues(String indName, Downsampling downsampling, List<String> ids, String valueCName) throws IOException;
+    IntValues getLinearIntValues(String indName, Downsampling downsampling, List<String> ids,
+        String valueCName) throws IOException;
 
-    IntValues[] getMultipleLinearIntValues(String indName, Downsampling downsampling, List<String> ids, int numOfLinear, String valueCName) throws IOException;
+    IntValues[] getMultipleLinearIntValues(String indName, Downsampling downsampling, List<String> ids,
+        List<Integer> linearIndex, String valueCName) throws IOException;
 
-    Thermodynamic getThermodynamic(String indName, Downsampling downsampling, List<String> ids, String valueCName) throws IOException;
+    Thermodynamic getThermodynamic(String indName, Downsampling downsampling, List<String> ids,
+        String valueCName) throws IOException;
 }
diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetricQuery.java b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetricQuery.java
index b4f948f..5a3a9f1 100644
--- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetricQuery.java
+++ b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetricQuery.java
@@ -22,10 +22,15 @@ import com.coxautodev.graphql.tools.GraphQLQueryResolver;
 import java.io.IOException;
 import java.text.ParseException;
 import java.util.List;
-import org.apache.skywalking.oap.query.graphql.type.*;
+import org.apache.skywalking.oap.query.graphql.type.BatchMetricConditions;
+import org.apache.skywalking.oap.query.graphql.type.Duration;
+import org.apache.skywalking.oap.query.graphql.type.MetricCondition;
 import org.apache.skywalking.oap.server.core.CoreModule;
-import org.apache.skywalking.oap.server.core.query.*;
-import org.apache.skywalking.oap.server.core.query.entity.*;
+import org.apache.skywalking.oap.server.core.query.DurationUtils;
+import org.apache.skywalking.oap.server.core.query.MetricQueryService;
+import org.apache.skywalking.oap.server.core.query.StepToDownsampling;
+import org.apache.skywalking.oap.server.core.query.entity.IntValues;
+import org.apache.skywalking.oap.server.core.query.entity.Thermodynamic;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 
 /**
@@ -54,21 +59,32 @@ public class MetricQuery implements GraphQLQueryResolver {
         return getMetricQueryService().getValues(metrics.getName(), metrics.getIds(), StepToDownsampling.transform(duration.getStep()), startTimeBucket, endTimeBucket);
     }
 
-    public IntValues getLinearIntValues(final MetricCondition metrics, final Duration duration) throws IOException, ParseException {
+    public IntValues getLinearIntValues(final MetricCondition metrics,
+        final Duration duration) throws IOException, ParseException {
         long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
         long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd());
 
         return getMetricQueryService().getLinearIntValues(metrics.getName(), metrics.getId(), StepToDownsampling.transform(duration.getStep()), startTimeBucket, endTimeBucket);
     }
 
-    public List<IntValues> getMultipleLinearIntValues(final MetricCondition metrics, final int numOfLinear, final Duration duration) throws IOException, ParseException {
+    public List<IntValues> getMultipleLinearIntValues(final MetricCondition metrics, final int numOfLinear,
+        final Duration duration) throws IOException, ParseException {
         long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
         long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd());
 
         return getMetricQueryService().getMultipleLinearIntValues(metrics.getName(), metrics.getId(), numOfLinear, StepToDownsampling.transform(duration.getStep()), startTimeBucket, endTimeBucket);
     }
 
-    public Thermodynamic getThermodynamic(final MetricCondition metrics, final Duration duration) throws IOException, ParseException {
+    public List<IntValues> getSubsetOfMultipleLinearIntValues(final MetricCondition metrics,
+        final List<Integer> linearIndex, final Duration duration) throws IOException, ParseException {
+        long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
+        long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd());
+
+        return getMetricQueryService().getSubsetOfMultipleLinearIntValues(metrics.getName(), metrics.getId(), linearIndex, StepToDownsampling.transform(duration.getStep()), startTimeBucket, endTimeBucket);
+    }
+
+    public Thermodynamic getThermodynamic(final MetricCondition metrics,
+        final Duration duration) throws IOException, ParseException {
         long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
         long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd());
 
diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol b/oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol
index 249adde..03ed785 160000
--- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol
+++ b/oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol
@@ -1 +1 @@
-Subproject commit 249addeaaf524c0dd990444e5f4bcaf355ce8e01
+Subproject commit 03ed7858ea05ade81b9ceaa3abe468b422ce8110
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetricsQueryEsDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetricsQueryEsDAO.java
index 7325fd4..5ce7df7 100644
--- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetricsQueryEsDAO.java
+++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetricsQueryEsDAO.java
@@ -135,13 +135,13 @@ public class MetricsQueryEsDAO extends EsDAO implements IMetricsQueryDAO {
     }
 
     @Override public IntValues[] getMultipleLinearIntValues(String indName, Downsampling downsampling,
-        List<String> ids, int numOfLinear, String valueCName) throws IOException {
+        List<String> ids, List<Integer> linearIndex, String valueCName) throws IOException {
         String indexName = ModelName.build(downsampling, indName);
 
         SearchResponse response = getClient().ids(indexName, ids.toArray(new String[0]));
         Map<String, Map<String, Object>> idMap = toMap(response);
 
-        IntValues[] intValuesArray = new IntValues[numOfLinear];
+        IntValues[] intValuesArray = new IntValues[linearIndex.size()];
         for (int i = 0; i < intValuesArray.length; i++) {
             intValuesArray[i] = new IntValues();
         }
@@ -159,8 +159,9 @@ public class MetricsQueryEsDAO extends EsDAO implements IMetricsQueryDAO {
                 IntKeyLongValueHashMap multipleValues = new IntKeyLongValueHashMap(5);
                 multipleValues.toObject((String)source.getOrDefault(valueCName, ""));
 
-                for (int i = 0; i < intValuesArray.length; i++) {
-                    intValuesArray[i].getLast().setValue(multipleValues.get(i).getValue());
+                for (int i = 0; i < linearIndex.size(); i++) {
+                    Integer index = linearIndex.get(i);
+                    intValuesArray[i].getLast().setValue(multipleValues.get(index).getValue());
                 }
             }
 
diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetricsQueryDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetricsQueryDAO.java
index 0e24925..8b37015 100644
--- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetricsQueryDAO.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetricsQueryDAO.java
@@ -145,7 +145,7 @@ public class H2MetricsQueryDAO extends H2SQLExecutor implements IMetricsQueryDAO
 
     @Override public IntValues[] getMultipleLinearIntValues(String indName, Downsampling downsampling,
         List<String> ids,
-        int numOfLinear,
+        final List<Integer> linearIndex,
         String valueCName) throws IOException {
         String tableName = ModelName.build(downsampling, indName);
 
@@ -157,7 +157,7 @@ public class H2MetricsQueryDAO extends H2SQLExecutor implements IMetricsQueryDAO
             idValues.append("'").append(ids.get(valueIdx)).append("'");
         }
 
-        IntValues[] intValuesArray = new IntValues[numOfLinear];
+        IntValues[] intValuesArray = new IntValues[linearIndex.size()];
         for (int i = 0; i < intValuesArray.length; i++) {
             intValuesArray[i] = new IntValues();
         }
@@ -170,10 +170,11 @@ public class H2MetricsQueryDAO extends H2SQLExecutor implements IMetricsQueryDAO
                     IntKeyLongValueHashMap multipleValues = new IntKeyLongValueHashMap(5);
                     multipleValues.toObject(resultSet.getString(valueCName));
 
-                    for (int i = 0; i < intValuesArray.length; i++) {
+                    for (int i = 0; i < linearIndex.size(); i++) {
+                        Integer index = linearIndex.get(i);
                         KVInt kv = new KVInt();
                         kv.setId(id);
-                        kv.setValue(multipleValues.get(i).getValue());
+                        kv.setValue(multipleValues.get(index).getValue());
                         intValuesArray[i].addKVInt(kv);
                     }
                 }