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

wusheng 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 594994f  1. Provide InsertRequest and UpdateRequest interface for 
prepare persistence. (#3131)
594994f is described below

commit 594994ffaec99d3a18225426b932feefb256fd53
Author: 彭勇升 pengys <[email protected]>
AuthorDate: Sun Jul 21 13:56:12 2019 +0800

    1. Provide InsertRequest and UpdateRequest interface for prepare 
persistence. (#3131)
    
    2. Implement the ids query for H2 metrics DAO.
---
 .../analysis/worker/MetricsPersistentWorker.java   |  2 +-
 .../oap/server/core/storage/IMetricsDAO.java       |  7 +++--
 .../oap/server/core/storage/StorageDAO.java        |  4 +--
 .../client/elasticsearch/ElasticSearchClient.java  |  8 +++---
 .../elasticsearch/ElasticSearchInsertRequest.java} | 23 +++++++--------
 .../elasticsearch/ElasticSearchUpdateRequest.java} | 22 +++++++--------
 .../client/jdbc/hikaricp/JDBCHikariCPClient.java   |  2 +-
 .../library/client/request/InsertRequest.java}     | 16 ++---------
 .../library/client/request/PrepareRequest.java}    | 16 ++---------
 .../library/client/request/UpdateRequest.java}     | 16 ++---------
 .../plugin/elasticsearch/base/MetricsEsDAO.java    | 10 +++----
 .../plugin/elasticsearch/base/StorageEsDAO.java    |  6 ++--
 .../storage/plugin/jdbc/ArrayParamBuilder.java}    | 25 ++++++++--------
 .../server/storage/plugin/jdbc/SQLExecutor.java    | 13 ++++-----
 .../storage/plugin/jdbc/h2/dao/H2MetricsDAO.java   | 19 ++++++++++---
 .../storage/plugin/jdbc/h2/dao/H2SQLExecutor.java  | 33 +++++++++++++++++-----
 .../storage/plugin/jdbc/h2/dao/H2StorageDAO.java   |  7 ++---
 .../plugin/jdbc/ArrayParamBuilderTestCase.java}    | 22 ++++++++-------
 18 files changed, 121 insertions(+), 130 deletions(-)

diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/MetricsPersistentWorker.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/MetricsPersistentWorker.java
index 066f70f..14135dc 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/MetricsPersistentWorker.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/MetricsPersistentWorker.java
@@ -40,7 +40,7 @@ public class MetricsPersistentWorker extends 
PersistenceWorker<Metrics, MergeDat
 
     private final Model model;
     private final MergeDataCache<Metrics> mergeDataCache;
-    private final IMetricsDAO<?, ?> metricsDAO;
+    private final IMetricsDAO metricsDAO;
     private final AbstractWorker<Metrics> nextAlarmWorker;
     private final AbstractWorker<ExportEvent> nextExportWorker;
     private final DataCarrier<Metrics> dataCarrier;
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
index 5c2e246..e67dfa8 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
@@ -22,15 +22,16 @@ import java.io.IOException;
 import java.util.Map;
 import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
 import org.apache.skywalking.oap.server.core.storage.model.Model;
+import org.apache.skywalking.oap.server.library.client.request.*;
 
 /**
  * @author peng-yongsheng
  */
-public interface IMetricsDAO<INSERT, UPDATE> extends DAO {
+public interface IMetricsDAO extends DAO {
 
     Map<String, Metrics> get(Model model, Metrics[] metrics) throws 
IOException;
 
-    INSERT prepareBatchInsert(Model model, Metrics metrics) throws IOException;
+    InsertRequest prepareBatchInsert(Model model, Metrics metrics) throws 
IOException;
 
-    UPDATE prepareBatchUpdate(Model model, Metrics metrics) throws IOException;
+    UpdateRequest prepareBatchUpdate(Model model, Metrics metrics) throws 
IOException;
 }
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageDAO.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageDAO.java
index 35d178d..4d3f26d 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageDAO.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageDAO.java
@@ -26,9 +26,9 @@ import 
org.apache.skywalking.oap.server.library.module.Service;
 /**
  * @author peng-yongsheng
  */
-public interface StorageDAO<INSERT, UPDATE> extends Service {
+public interface StorageDAO extends Service {
 
-    IMetricsDAO<INSERT, UPDATE> newMetricsDao(StorageBuilder<Metrics> 
storageBuilder);
+    IMetricsDAO newMetricsDao(StorageBuilder<Metrics> storageBuilder);
 
     IRegisterDAO newRegisterDao(StorageBuilder<RegisterSource> storageBuilder);
 
diff --git 
a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/elasticsearch/ElasticSearchClient.java
 
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/elasticsearch/ElasticSearchClient.java
index cbee9e2..ef9f404 100644
--- 
a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/elasticsearch/ElasticSearchClient.java
+++ 
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/elasticsearch/ElasticSearchClient.java
@@ -254,14 +254,14 @@ public class ElasticSearchClient implements Client {
         client.update(request);
     }
 
-    public IndexRequest prepareInsert(String indexName, String id, 
XContentBuilder source) {
+    public ElasticSearchInsertRequest prepareInsert(String indexName, String 
id, XContentBuilder source) {
         indexName = formatIndexName(indexName);
-        return new IndexRequest(indexName, TYPE, id).source(source);
+        return new ElasticSearchInsertRequest(indexName, TYPE, 
id).source(source);
     }
 
-    public UpdateRequest prepareUpdate(String indexName, String id, 
XContentBuilder source) {
+    public ElasticSearchUpdateRequest prepareUpdate(String indexName, String 
id, XContentBuilder source) {
         indexName = formatIndexName(indexName);
-        return new UpdateRequest(indexName, TYPE, id).doc(source);
+        return new ElasticSearchUpdateRequest(indexName, TYPE, id).doc(source);
     }
 
     public int delete(String indexName, String timeBucketColumnName, long 
endTimeBucket) throws IOException {
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
 
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/elasticsearch/ElasticSearchInsertRequest.java
similarity index 57%
copy from 
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
copy to 
oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/elasticsearch/ElasticSearchInsertRequest.java
index 5c2e246..19e974c 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
+++ 
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/elasticsearch/ElasticSearchInsertRequest.java
@@ -13,24 +13,25 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- *
  */
 
-package org.apache.skywalking.oap.server.core.storage;
+package org.apache.skywalking.oap.server.library.client.elasticsearch;
 
-import java.io.IOException;
-import java.util.Map;
-import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
-import org.apache.skywalking.oap.server.core.storage.model.Model;
+import org.apache.skywalking.oap.server.library.client.request.InsertRequest;
+import org.elasticsearch.action.index.IndexRequest;
+import org.elasticsearch.common.xcontent.XContentBuilder;
 
 /**
  * @author peng-yongsheng
  */
-public interface IMetricsDAO<INSERT, UPDATE> extends DAO {
-
-    Map<String, Metrics> get(Model model, Metrics[] metrics) throws 
IOException;
+public class ElasticSearchInsertRequest extends IndexRequest implements 
InsertRequest {
 
-    INSERT prepareBatchInsert(Model model, Metrics metrics) throws IOException;
+    public ElasticSearchInsertRequest(String index, String type, String id) {
+        super(index, type, id);
+    }
 
-    UPDATE prepareBatchUpdate(Model model, Metrics metrics) throws IOException;
+    @Override public ElasticSearchInsertRequest source(XContentBuilder 
sourceBuilder) {
+        super.source(sourceBuilder);
+        return this;
+    }
 }
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
 
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/elasticsearch/ElasticSearchUpdateRequest.java
similarity index 59%
copy from 
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
copy to 
oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/elasticsearch/ElasticSearchUpdateRequest.java
index 5c2e246..9429d93 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
+++ 
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/elasticsearch/ElasticSearchUpdateRequest.java
@@ -13,24 +13,24 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- *
  */
 
-package org.apache.skywalking.oap.server.core.storage;
+package org.apache.skywalking.oap.server.library.client.elasticsearch;
 
-import java.io.IOException;
-import java.util.Map;
-import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
-import org.apache.skywalking.oap.server.core.storage.model.Model;
+import org.elasticsearch.action.update.UpdateRequest;
+import org.elasticsearch.common.xcontent.XContentBuilder;
 
 /**
  * @author peng-yongsheng
  */
-public interface IMetricsDAO<INSERT, UPDATE> extends DAO {
-
-    Map<String, Metrics> get(Model model, Metrics[] metrics) throws 
IOException;
+public class ElasticSearchUpdateRequest extends UpdateRequest implements 
org.apache.skywalking.oap.server.library.client.request.UpdateRequest {
 
-    INSERT prepareBatchInsert(Model model, Metrics metrics) throws IOException;
+    public ElasticSearchUpdateRequest(String index, String type, String id) {
+        super(index, type, id);
+    }
 
-    UPDATE prepareBatchUpdate(Model model, Metrics metrics) throws IOException;
+    @Override public ElasticSearchUpdateRequest doc(XContentBuilder source) {
+        super.doc(source);
+        return this;
+    }
 }
diff --git 
a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/jdbc/hikaricp/JDBCHikariCPClient.java
 
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/jdbc/hikaricp/JDBCHikariCPClient.java
index fcdeb11..158e918 100644
--- 
a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/jdbc/hikaricp/JDBCHikariCPClient.java
+++ 
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/jdbc/hikaricp/JDBCHikariCPClient.java
@@ -31,7 +31,7 @@ import org.slf4j.*;
  * @author wusheng
  */
 public class JDBCHikariCPClient implements Client {
-    private final Logger logger = 
LoggerFactory.getLogger(JDBCHikariCPClient.class);
+    private static final Logger logger = 
LoggerFactory.getLogger(JDBCHikariCPClient.class);
 
     private HikariDataSource dataSource;
     private HikariConfig hikariConfig;
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
 
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/request/InsertRequest.java
similarity index 60%
copy from 
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
copy to 
oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/request/InsertRequest.java
index 5c2e246..c3308d3 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
+++ 
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/request/InsertRequest.java
@@ -13,24 +13,12 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- *
  */
 
-package org.apache.skywalking.oap.server.core.storage;
-
-import java.io.IOException;
-import java.util.Map;
-import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
-import org.apache.skywalking.oap.server.core.storage.model.Model;
+package org.apache.skywalking.oap.server.library.client.request;
 
 /**
  * @author peng-yongsheng
  */
-public interface IMetricsDAO<INSERT, UPDATE> extends DAO {
-
-    Map<String, Metrics> get(Model model, Metrics[] metrics) throws 
IOException;
-
-    INSERT prepareBatchInsert(Model model, Metrics metrics) throws IOException;
-
-    UPDATE prepareBatchUpdate(Model model, Metrics metrics) throws IOException;
+public interface InsertRequest extends PrepareRequest {
 }
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
 
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/request/PrepareRequest.java
similarity index 60%
copy from 
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
copy to 
oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/request/PrepareRequest.java
index 5c2e246..05fbd94 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
+++ 
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/request/PrepareRequest.java
@@ -13,24 +13,12 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- *
  */
 
-package org.apache.skywalking.oap.server.core.storage;
-
-import java.io.IOException;
-import java.util.Map;
-import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
-import org.apache.skywalking.oap.server.core.storage.model.Model;
+package org.apache.skywalking.oap.server.library.client.request;
 
 /**
  * @author peng-yongsheng
  */
-public interface IMetricsDAO<INSERT, UPDATE> extends DAO {
-
-    Map<String, Metrics> get(Model model, Metrics[] metrics) throws 
IOException;
-
-    INSERT prepareBatchInsert(Model model, Metrics metrics) throws IOException;
-
-    UPDATE prepareBatchUpdate(Model model, Metrics metrics) throws IOException;
+public interface PrepareRequest {
 }
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
 
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/request/UpdateRequest.java
similarity index 60%
copy from 
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
copy to 
oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/request/UpdateRequest.java
index 5c2e246..209cc43 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
+++ 
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/request/UpdateRequest.java
@@ -13,24 +13,12 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- *
  */
 
-package org.apache.skywalking.oap.server.core.storage;
-
-import java.io.IOException;
-import java.util.Map;
-import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
-import org.apache.skywalking.oap.server.core.storage.model.Model;
+package org.apache.skywalking.oap.server.library.client.request;
 
 /**
  * @author peng-yongsheng
  */
-public interface IMetricsDAO<INSERT, UPDATE> extends DAO {
-
-    Map<String, Metrics> get(Model model, Metrics[] metrics) throws 
IOException;
-
-    INSERT prepareBatchInsert(Model model, Metrics metrics) throws IOException;
-
-    UPDATE prepareBatchUpdate(Model model, Metrics metrics) throws IOException;
+public interface UpdateRequest extends PrepareRequest {
 }
diff --git 
a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/MetricsEsDAO.java
 
b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/MetricsEsDAO.java
index a0c8212..e0403c7 100644
--- 
a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/MetricsEsDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/MetricsEsDAO.java
@@ -23,16 +23,14 @@ import java.util.*;
 import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
 import org.apache.skywalking.oap.server.core.storage.*;
 import org.apache.skywalking.oap.server.core.storage.model.Model;
-import 
org.apache.skywalking.oap.server.library.client.elasticsearch.ElasticSearchClient;
-import org.elasticsearch.action.index.IndexRequest;
+import org.apache.skywalking.oap.server.library.client.elasticsearch.*;
 import org.elasticsearch.action.search.SearchResponse;
-import org.elasticsearch.action.update.UpdateRequest;
 import org.elasticsearch.common.xcontent.XContentBuilder;
 
 /**
  * @author peng-yongsheng
  */
-public class MetricsEsDAO extends EsDAO implements IMetricsDAO<IndexRequest, 
UpdateRequest> {
+public class MetricsEsDAO extends EsDAO implements IMetricsDAO {
 
     private final StorageBuilder<Metrics> storageBuilder;
 
@@ -57,13 +55,13 @@ public class MetricsEsDAO extends EsDAO implements 
IMetricsDAO<IndexRequest, Upd
         return result;
     }
 
-    @Override public IndexRequest prepareBatchInsert(Model model, Metrics 
metrics) throws IOException {
+    @Override public ElasticSearchInsertRequest prepareBatchInsert(Model 
model, Metrics metrics) throws IOException {
         XContentBuilder builder = 
map2builder(storageBuilder.data2Map(metrics));
         String modelName = TimeSeriesUtils.timeSeries(model, 
metrics.getTimeBucket());
         return getClient().prepareInsert(modelName, metrics.id(), builder);
     }
 
-    @Override public UpdateRequest prepareBatchUpdate(Model model, Metrics 
metrics) throws IOException {
+    @Override public ElasticSearchUpdateRequest prepareBatchUpdate(Model 
model, Metrics metrics) throws IOException {
         XContentBuilder builder = 
map2builder(storageBuilder.data2Map(metrics));
         String modelName = TimeSeriesUtils.timeSeries(model, 
metrics.getTimeBucket());
         return getClient().prepareUpdate(modelName, metrics.id(), builder);
diff --git 
a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/StorageEsDAO.java
 
b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/StorageEsDAO.java
index 318b9a8..52fe3fb 100644
--- 
a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/StorageEsDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/StorageEsDAO.java
@@ -23,19 +23,17 @@ import 
org.apache.skywalking.oap.server.core.analysis.record.Record;
 import org.apache.skywalking.oap.server.core.register.RegisterSource;
 import org.apache.skywalking.oap.server.core.storage.*;
 import 
org.apache.skywalking.oap.server.library.client.elasticsearch.ElasticSearchClient;
-import org.elasticsearch.action.index.IndexRequest;
-import org.elasticsearch.action.update.UpdateRequest;
 
 /**
  * @author peng-yongsheng
  */
-public class StorageEsDAO extends EsDAO implements StorageDAO<IndexRequest, 
UpdateRequest> {
+public class StorageEsDAO extends EsDAO implements StorageDAO {
 
     public StorageEsDAO(ElasticSearchClient client) {
         super(client);
     }
 
-    @Override public IMetricsDAO<IndexRequest, UpdateRequest> 
newMetricsDao(StorageBuilder<Metrics> storageBuilder) {
+    @Override public IMetricsDAO newMetricsDao(StorageBuilder<Metrics> 
storageBuilder) {
         return new MetricsEsDAO(getClient(), storageBuilder);
     }
 
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
 
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/ArrayParamBuilder.java
similarity index 60%
copy from 
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
copy to 
oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/ArrayParamBuilder.java
index 5c2e246..78da5fc 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/ArrayParamBuilder.java
@@ -13,24 +13,23 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- *
  */
 
-package org.apache.skywalking.oap.server.core.storage;
-
-import java.io.IOException;
-import java.util.Map;
-import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
-import org.apache.skywalking.oap.server.core.storage.model.Model;
+package org.apache.skywalking.oap.server.storage.plugin.jdbc;
 
 /**
  * @author peng-yongsheng
  */
-public interface IMetricsDAO<INSERT, UPDATE> extends DAO {
-
-    Map<String, Metrics> get(Model model, Metrics[] metrics) throws 
IOException;
-
-    INSERT prepareBatchInsert(Model model, Metrics metrics) throws IOException;
+public class ArrayParamBuilder {
 
-    UPDATE prepareBatchUpdate(Model model, Metrics metrics) throws IOException;
+    public static String build(String[] values) {
+        StringBuilder param = new StringBuilder();
+        for (int i = 0; i < values.length; i++) {
+            param.append("'").append(values[i]).append("'");
+            if (i < values.length - 1) {
+                param.append(",");
+            }
+        }
+        return param.toString();
+    }
 }
diff --git 
a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/SQLExecutor.java
 
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/SQLExecutor.java
index 54b1192..d2d7cc2 100644
--- 
a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/SQLExecutor.java
+++ 
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/SQLExecutor.java
@@ -18,20 +18,19 @@
 
 package org.apache.skywalking.oap.server.storage.plugin.jdbc;
 
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
+import java.sql.*;
 import java.util.List;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.skywalking.oap.server.library.client.request.*;
+import org.slf4j.*;
 
 /**
  * A SQL executor.
  *
  * @author wusheng
  */
-public class SQLExecutor {
-    private final Logger logger = LoggerFactory.getLogger(SQLExecutor.class);
+public class SQLExecutor implements InsertRequest, UpdateRequest {
+
+    private static final Logger logger = 
LoggerFactory.getLogger(SQLExecutor.class);
 
     private String sql;
     private List<Object> param;
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/H2MetricsDAO.java
 
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetricsDAO.java
index 1943c94..7f18b4c 100644
--- 
a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetricsDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetricsDAO.java
@@ -19,7 +19,7 @@
 package org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao;
 
 import java.io.IOException;
-import java.util.Map;
+import java.util.*;
 import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
 import org.apache.skywalking.oap.server.core.storage.*;
 import org.apache.skywalking.oap.server.core.storage.model.Model;
@@ -29,7 +29,7 @@ import 
org.apache.skywalking.oap.server.storage.plugin.jdbc.SQLExecutor;
 /**
  * @author wusheng
  */
-public class H2MetricsDAO extends H2SQLExecutor implements 
IMetricsDAO<SQLExecutor, SQLExecutor> {
+public class H2MetricsDAO extends H2SQLExecutor implements IMetricsDAO {
 
     private JDBCHikariCPClient h2Client;
     private StorageBuilder<Metrics> storageBuilder;
@@ -40,8 +40,19 @@ public class H2MetricsDAO extends H2SQLExecutor implements 
IMetricsDAO<SQLExecut
     }
 
     @Override public Map<String, Metrics> get(Model model, Metrics[] metrics) 
throws IOException {
-        //        return (Metrics)getByID(h2Client, model.getName(), 
metrics.id(), storageBuilder);
-        return null;
+        Map<String, Metrics> result = new HashMap<>();
+
+        String[] ids = new String[metrics.length];
+        for (int i = 0; i < metrics.length; i++) {
+            ids[i] = metrics[i].id();
+        }
+
+        List<StorageData> storageDataList = getByIDs(h2Client, 
model.getName(), ids, storageBuilder);
+
+        for (StorageData storageData : storageDataList) {
+            result.put(storageData.id(), (Metrics)storageData);
+        }
+        return result;
     }
 
     @Override public SQLExecutor prepareBatchInsert(Model model, Metrics 
metrics) throws IOException {
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/H2SQLExecutor.java
 
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2SQLExecutor.java
index 3ab7d29..049bee3 100644
--- 
a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2SQLExecutor.java
+++ 
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2SQLExecutor.java
@@ -32,11 +32,33 @@ import 
org.apache.skywalking.oap.server.storage.plugin.jdbc.*;
 import org.slf4j.*;
 
 /**
- * @author wusheng
+ * @author wusheng, peng-yongsheng
  */
 public class H2SQLExecutor {
     private static final Logger logger = 
LoggerFactory.getLogger(H2SQLExecutor.class);
 
+    protected List<StorageData> getByIDs(JDBCHikariCPClient h2Client, String 
modelName, String[] ids,
+        StorageBuilder storageBuilder) throws IOException {
+
+        try (Connection connection = h2Client.getConnection()) {
+            /*
+             * Although H2 database or other database support createArrayOf 
and setArray operate.
+             * But Mysql 5.1.44 driver doesn't.
+             */
+            String param = ArrayParamBuilder.build(ids);
+
+            try (ResultSet rs = h2Client.executeQuery(connection, "SELECT * 
FROM " + modelName + " WHERE id in (" + param + ")")) {
+                List<StorageData> storageDataList = new ArrayList<>();
+                while (rs.next()) {
+                    storageDataList.add(toStorageData(rs, modelName, 
storageBuilder));
+                }
+                return storageDataList;
+            }
+        } catch (SQLException | JDBCClientException e) {
+            throw new IOException(e.getMessage(), e);
+        }
+    }
+
     protected StorageData getByID(JDBCHikariCPClient h2Client, String 
modelName, String id,
         StorageBuilder storageBuilder) throws IOException {
         try (Connection connection = h2Client.getConnection()) {
@@ -59,8 +81,7 @@ public class H2SQLExecutor {
         }
     }
 
-    protected StorageData toStorageData(ResultSet rs, String modelName,
-        StorageBuilder storageBuilder) throws SQLException {
+    protected StorageData toStorageData(ResultSet rs, String modelName, 
StorageBuilder storageBuilder) throws SQLException {
         if (rs.next()) {
             Map data = new HashMap();
             List<ModelColumn> columns = 
TableMetaInfo.get(modelName).getColumns();
@@ -85,8 +106,7 @@ public class H2SQLExecutor {
         return Const.NONE;
     }
 
-    protected SQLExecutor getInsertExecutor(String modelName, StorageData 
metrics,
-        StorageBuilder storageBuilder) throws IOException {
+    protected SQLExecutor getInsertExecutor(String modelName, StorageData 
metrics, StorageBuilder storageBuilder) throws IOException {
         Map<String, Object> objectMap = storageBuilder.data2Map(metrics);
 
         SQLBuilder sqlBuilder = new SQLBuilder("INSERT INTO " + modelName + " 
VALUES");
@@ -113,8 +133,7 @@ public class H2SQLExecutor {
         return new SQLExecutor(sqlBuilder.toString(), param);
     }
 
-    protected SQLExecutor getUpdateExecutor(String modelName, StorageData 
metrics,
-        StorageBuilder storageBuilder) throws IOException {
+    protected SQLExecutor getUpdateExecutor(String modelName, StorageData 
metrics, StorageBuilder storageBuilder) throws IOException {
         Map<String, Object> objectMap = storageBuilder.data2Map(metrics);
 
         SQLBuilder sqlBuilder = new SQLBuilder("UPDATE " + modelName + " SET 
");
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/H2StorageDAO.java
 
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2StorageDAO.java
index d8ef839..1d95881 100644
--- 
a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2StorageDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2StorageDAO.java
@@ -23,12 +23,11 @@ import 
org.apache.skywalking.oap.server.core.analysis.record.Record;
 import org.apache.skywalking.oap.server.core.register.RegisterSource;
 import org.apache.skywalking.oap.server.core.storage.*;
 import 
org.apache.skywalking.oap.server.library.client.jdbc.hikaricp.JDBCHikariCPClient;
-import org.apache.skywalking.oap.server.storage.plugin.jdbc.SQLExecutor;
 
 /**
- * @author wusheng
+ * @author wusheng, peng-yongsheng
  */
-public class H2StorageDAO implements StorageDAO<SQLExecutor, SQLExecutor> {
+public class H2StorageDAO implements StorageDAO {
 
     private JDBCHikariCPClient h2Client;
 
@@ -36,7 +35,7 @@ public class H2StorageDAO implements StorageDAO<SQLExecutor, 
SQLExecutor> {
         this.h2Client = h2Client;
     }
 
-    @Override public IMetricsDAO<SQLExecutor, SQLExecutor> 
newMetricsDao(StorageBuilder<Metrics> storageBuilder) {
+    @Override public IMetricsDAO newMetricsDao(StorageBuilder<Metrics> 
storageBuilder) {
         return new H2MetricsDAO(h2Client, storageBuilder);
     }
 
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
 
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/test/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/ArrayParamBuilderTestCase.java
similarity index 60%
copy from 
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
copy to 
oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/test/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/ArrayParamBuilderTestCase.java
index 5c2e246..8d120a5 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/test/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/ArrayParamBuilderTestCase.java
@@ -13,24 +13,26 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- *
  */
 
-package org.apache.skywalking.oap.server.core.storage;
+package org.apache.skywalking.oap.server.storage.plugin.jdbc;
 
-import java.io.IOException;
-import java.util.Map;
-import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
-import org.apache.skywalking.oap.server.core.storage.model.Model;
+import org.junit.*;
 
 /**
  * @author peng-yongsheng
  */
-public interface IMetricsDAO<INSERT, UPDATE> extends DAO {
+public class ArrayParamBuilderTestCase {
 
-    Map<String, Metrics> get(Model model, Metrics[] metrics) throws 
IOException;
+    @Test
+    public void testBuild() {
+        String param = ArrayParamBuilder.build(new String[] {"1"});
+        Assert.assertEquals("'1'", param);
 
-    INSERT prepareBatchInsert(Model model, Metrics metrics) throws IOException;
+        param = ArrayParamBuilder.build(new String[] {"1", "2"});
+        Assert.assertEquals("'1','2'", param);
 
-    UPDATE prepareBatchUpdate(Model model, Metrics metrics) throws IOException;
+        param = ArrayParamBuilder.build(new String[] {"1", "2", "3"});
+        Assert.assertEquals("'1','2','3'", param);
+    }
 }

Reply via email to