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();