You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@skywalking.apache.org by wu...@apache.org on 2018/09/18 03:46:52 UTC

[incubator-skywalking] branch h2-storage updated: Add batch dao for H2.

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

wusheng pushed a commit to branch h2-storage
in repository https://gitbox.apache.org/repos/asf/incubator-skywalking.git


The following commit(s) were added to refs/heads/h2-storage by this push:
     new 0494f75  Add batch dao for H2.
0494f75 is described below

commit 0494f75eb60236aeef9e5c4c4a395500b668fad5
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Tue Sep 18 11:46:41 2018 +0800

    Add batch dao for H2.
---
 .../storage/plugin/jdbc/h2/H2StorageProvider.java  |  2 +-
 .../storage/plugin/jdbc/h2/dao/H2BatchDAO.java     | 44 ++++++++++++++++++++++
 .../storage/plugin/jdbc/h2/dao/H2IndicatorDAO.java |  7 ++--
 .../plugin/jdbc/h2/dao/H2TableInstaller.java       |  1 +
 4 files changed, 50 insertions(+), 4 deletions(-)

diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/H2StorageProvider.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/H2StorageProvider.java
index feb0d9d..c1459ef 100644
--- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/H2StorageProvider.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/H2StorageProvider.java
@@ -82,7 +82,7 @@ public class H2StorageProvider extends ModuleProvider {
         settings.setProperty("dataSource.password", "");
         h2Client = new JDBCHikariCPClient(settings);
 
-        this.registerServiceImplementation(IBatchDAO.class, new H2BatchDAO());
+        this.registerServiceImplementation(IBatchDAO.class, new H2BatchDAO(h2Client));
         this.registerServiceImplementation(StorageDAO.class, new H2StorageDAO(h2Client));
         this.registerServiceImplementation(IRegisterLockDAO.class, new H2RegisterLockDAO());
 
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/H2BatchDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2BatchDAO.java
index a252733..d5dc471 100644
--- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2BatchDAO.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2BatchDAO.java
@@ -18,11 +18,55 @@
 
 package org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao;
 
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
 import java.util.List;
 import org.apache.skywalking.oap.server.core.storage.IBatchDAO;
+import org.apache.skywalking.oap.server.library.client.jdbc.JDBCClientException;
+import org.apache.skywalking.oap.server.library.client.jdbc.hikaricp.JDBCHikariCPClient;
+import org.apache.skywalking.oap.server.storage.plugin.jdbc.SQLExecutor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
+/**
+ * @author wusheng
+ */
 public class H2BatchDAO implements IBatchDAO {
+    private static final Logger logger = LoggerFactory.getLogger(H2BatchDAO.class);
+
+    private JDBCHikariCPClient h2Client;
+
+    public H2BatchDAO(JDBCHikariCPClient h2Client) {
+        this.h2Client = h2Client;
+    }
+
     @Override public void batchPersistence(List<?> batchCollection) {
+        if (batchCollection.size() == 0) {
+            return;
+        }
+
+        if (logger.isDebugEnabled()) {
+            logger.debug("batch sql statements execute, data size: {}", batchCollection.size());
+        }
+
+        try (Connection connection = h2Client.getConnection()) {
+            connection.setAutoCommit(true);
+
+            for (Object exe : batchCollection) {
+                SQLExecutor sqlExecutor = (SQLExecutor)exe;
+
+                PreparedStatement preparedStatement = connection.prepareStatement(sqlExecutor.getSql());
 
+                for (int i = 0; i < sqlExecutor.getParam().size(); i++) {
+                    preparedStatement.setObject(i + 1, sqlExecutor.getParam().get(i));
+                }
+                preparedStatement.execute();
+            }
+        } catch (SQLException e) {
+            logger.error(e.getMessage(), e);
+        } catch (JDBCClientException e) {
+            logger.error(e.getMessage(), e);
+        }
     }
 }
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/H2IndicatorDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2IndicatorDAO.java
index 6043079..c3aa111 100644
--- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2IndicatorDAO.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2IndicatorDAO.java
@@ -49,7 +49,7 @@ public class H2IndicatorDAO implements IIndicatorDAO<SQLExecutor, SQLExecutor> {
     }
 
     @Override public Indicator get(String modelName, Indicator indicator) throws IOException {
-        try (ResultSet rs = h2Client.executeQuery("SELECT * FROM " + modelName + " WHERE entity_id = ?", new Object[] {indicator.id()})) {
+        try (ResultSet rs = h2Client.executeQuery("SELECT * FROM " + modelName + " WHERE id = ?", new Object[] {indicator.id()})) {
             while (rs.next()) {
                 Map data = new HashMap();
                 List<ModelColumn> columns = TableMetaInfo.get(modelName).getColumns();
@@ -72,7 +72,8 @@ public class H2IndicatorDAO implements IIndicatorDAO<SQLExecutor, SQLExecutor> {
         SQLBuilder sqlBuilder = new SQLBuilder("INSERT INTO " + modelName + " VALUES");
         List<ModelColumn> columns = TableMetaInfo.get(modelName).getColumns();
         List<Object> param = new ArrayList<>();
-        sqlBuilder.append("(");
+        sqlBuilder.append("(id=?,");
+        param.add(indicator.id());
         for (int i = 0; i < columns.size(); i++) {
             ModelColumn column = columns.get(i);
             sqlBuilder.append("?");
@@ -112,7 +113,7 @@ public class H2IndicatorDAO implements IIndicatorDAO<SQLExecutor, SQLExecutor> {
                 param.add(value);
             }
         }
-        sqlBuilder.append(" WHERE entity_id = ?");
+        sqlBuilder.append(" WHERE id = ?");
         param.add(indicator.id());
 
         return new SQLExecutor(sqlBuilder.toString(), 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/H2TableInstaller.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2TableInstaller.java
index 815bf63..46c38e4 100644
--- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2TableInstaller.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2TableInstaller.java
@@ -71,6 +71,7 @@ public class H2TableInstaller extends ModelInstaller {
         TableMetaInfo.addModel(model);
         JDBCHikariCPClient h2Client = (JDBCHikariCPClient)client;
         SQLBuilder tableCreateSQL = new SQLBuilder("CREATE TABLE " + model.getName() + " (");
+        tableCreateSQL.appendLine("id VARCHAR2(300), ");
         for (int i = 0; i < model.getColumns().size(); i++) {
             ModelColumn column = model.getColumns().get(i);
             ColumnName name = column.getColumnName();