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/17 15:28:28 UTC
[incubator-skywalking] 01/01: H2 storage code skeleton.
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
commit c3d7350251fb7c23e777f4df9f85e57e98a73f2e
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Mon Sep 17 23:28:14 2018 +0800
H2 storage code skeleton.
---
.../network/trace/component/ComponentsDefine.java | 2 +-
.../apm/plugin/dubbo/DubboInterceptor.java | 4 +-
.../jdbc/h2/define/DriverInstrumentation.java | 2 +-
.../h2/define/JdbcConnectionInstrumentation.java | 2 +-
.../h2/define/JdbcXAConnectionInstrumentation.java | 4 +-
.../PooledJdbcConnectionInstrumentation.java | 4 +-
.../jdbc/connectionurl/parser/URLParser.java | 2 +-
.../apm/plugin/jdbc/trace/ConnectionInfo.java | 2 +-
.../jdbc/connectionurl/parser/URLParserTest.java | 8 +-
oap-server/pom.xml | 6 +
.../oap/server/core/storage/StorageException.java | 4 +
oap-server/server-library/library-client/pom.xml | 4 +-
.../oap/server/library/client/h2/H2Client.java | 113 ----------------
.../JDBCClientException.java} | 11 +-
.../client/jdbc/hikaricp/JDBCHikariCPClient.java | 127 +++++++++++++++++
.../client/shardingjdbc/ShardingjdbcClient.java | 150 ---------------------
.../shardingjdbc/ShardingjdbcClientConfig.java | 73 ----------
oap-server/server-starter/pom.xml | 2 +-
.../src/main/resources/application.yml | 31 ++---
oap-server/server-storage-plugin/pom.xml | 2 +-
.../pom.xml | 19 ++-
.../server/storage/plugin/jdbc/SQLBuilder.java} | 40 +++---
.../server/storage/plugin/jdbc/SQLExecutor.java} | 24 ++--
.../server/storage/plugin/jdbc/TableMetaInfo.java} | 19 +--
.../storage/plugin/jdbc/h2/H2StorageConfig.java} | 12 +-
.../storage/plugin/jdbc/h2/H2StorageProvider.java | 118 ++++++++++++++++
.../storage/plugin/jdbc/h2/dao/H2BatchDAO.java} | 13 +-
.../jdbc/h2/dao/H2EndpointInventoryCacheDAO.java} | 18 +--
.../storage/plugin/jdbc/h2/dao/H2IndicatorDAO.java | 124 +++++++++++++++++
.../h2/dao/H2NetworkAddressInventoryCacheDAO.java} | 18 +--
.../plugin/jdbc/h2/dao/H2RegisterLockDAO.java} | 20 +--
.../dao/H2ServiceInstanceInventoryCacheDAO.java} | 38 ++----
.../jdbc/h2/dao/H2ServiceInventoryCacheDAO.java} | 20 +--
.../storage/plugin/jdbc/h2/dao/H2StorageDAO.java | 46 +++++++
.../plugin/jdbc/h2/dao/H2TableInstaller.java | 108 +++++++++++++++
.../plugin/jdbc/h2/dao/H2TopologyQueryDAO.java | 69 ++++++++++
...alking.oap.server.library.module.ModuleProvider | 19 +++
37 files changed, 791 insertions(+), 487 deletions(-)
diff --git a/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java b/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java
index 02a6730..e6427be 100644
--- a/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java
+++ b/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java
@@ -68,7 +68,7 @@ public class ComponentsDefine {
public static final OfficialComponent JEDIS = new OfficialComponent(30, "Jedis");
- public static final OfficialComponent H2_JDBC_DRIVER = new OfficialComponent(32, "h2-jdbc-driver");
+ public static final OfficialComponent H2_JDBC_DRIVER = new OfficialComponent(32, "jdbc-jdbc-driver");
public static final OfficialComponent MYSQL_JDBC_DRIVER = new OfficialComponent(33, "mysql-connector-java");
diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/apache/skywalking/apm/plugin/dubbo/DubboInterceptor.java b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/apache/skywalking/apm/plugin/dubbo/DubboInterceptor.java
index 994bc89..5f447e0 100644
--- a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/apache/skywalking/apm/plugin/dubbo/DubboInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/apache/skywalking/apm/plugin/dubbo/DubboInterceptor.java
@@ -45,10 +45,10 @@ import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
*/
public class DubboInterceptor implements InstanceMethodsAroundInterceptor {
/**
- * <h2>Consumer:</h2> The serialized trace context data will
+ * <jdbc>Consumer:</jdbc> The serialized trace context data will
* inject to the {@link RpcContext#attachments} for transport to provider side.
* <p>
- * <h2>Provider:</h2> The serialized trace context data will extract from
+ * <jdbc>Provider:</jdbc> The serialized trace context data will extract from
* {@link RpcContext#attachments}. current trace segment will ref if the serialize context data is not null.
*/
@Override
diff --git a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/h2/define/DriverInstrumentation.java b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/h2/define/DriverInstrumentation.java
index 3d4fafd..1fd69d6 100644
--- a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/h2/define/DriverInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/h2/define/DriverInstrumentation.java
@@ -30,7 +30,7 @@ import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName
* @author zhangxin
*/
public class DriverInstrumentation extends AbstractDriverInstrumentation {
- private static final String CLASS_OF_INTERCEPT_H2_DRIVER = "org.h2.Driver";
+ private static final String CLASS_OF_INTERCEPT_H2_DRIVER = "org.jdbc.Driver";
@Override
protected ClassMatch enhanceClass() {
diff --git a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/h2/define/JdbcConnectionInstrumentation.java b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/h2/define/JdbcConnectionInstrumentation.java
index 0b778b2..7ee6970 100644
--- a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/h2/define/JdbcConnectionInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/h2/define/JdbcConnectionInstrumentation.java
@@ -29,7 +29,7 @@ import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName
* @author zhangxin
*/
public class JdbcConnectionInstrumentation extends AbstractConnectionInstrumentation {
- public static final String ENHANCE_CLASS = "org.h2.jdbc.JdbcConnection";
+ public static final String ENHANCE_CLASS = "org.jdbc.jdbc.JdbcConnection";
@Override protected ClassMatch enhanceClass() {
return byName(ENHANCE_CLASS);
diff --git a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/h2/define/JdbcXAConnectionInstrumentation.java b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/h2/define/JdbcXAConnectionInstrumentation.java
index 000f7ba..6e6945c 100644
--- a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/h2/define/JdbcXAConnectionInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/h2/define/JdbcXAConnectionInstrumentation.java
@@ -34,8 +34,8 @@ import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName
*/
public class JdbcXAConnectionInstrumentation extends AbstractConnectionInstrumentation {
- public static final String ENHANCE_CLASS = "org.h2.jdbcx.JdbcXAConnection";
- public static final String CONSTRUCTOR_INTERCEPT_CLASS = "org.apache.skywalking.apm.plugin.jdbc.h2.JdbcXAConnectionConstructorInterceptor";
+ public static final String ENHANCE_CLASS = "org.jdbc.jdbcx.JdbcXAConnection";
+ public static final String CONSTRUCTOR_INTERCEPT_CLASS = "org.apache.skywalking.apm.plugin.jdbc.jdbc.JdbcXAConnectionConstructorInterceptor";
@Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
return new ConstructorInterceptPoint[] {
diff --git a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/h2/define/PooledJdbcConnectionInstrumentation.java b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/h2/define/PooledJdbcConnectionInstrumentation.java
index 0e07a66..dc50ff6 100644
--- a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/h2/define/PooledJdbcConnectionInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/h2/define/PooledJdbcConnectionInstrumentation.java
@@ -35,8 +35,8 @@ import static net.bytebuddy.matcher.ElementMatchers.any;
*/
public class PooledJdbcConnectionInstrumentation extends AbstractConnectionInstrumentation {
- public static final String CONSTRUCTOR_INTERCEPT_CLASS = "org.apache.skywalking.apm.plugin.jdbc.h2.PooledJdbcConnectionConstructorInterceptor";
- public static final String ENHANCE_CLASS = "org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection";
+ public static final String CONSTRUCTOR_INTERCEPT_CLASS = "org.apache.skywalking.apm.plugin.jdbc.jdbc.PooledJdbcConnectionConstructorInterceptor";
+ public static final String ENHANCE_CLASS = "org.jdbc.jdbcx.JdbcXAConnection$PooledJdbcConnection";
@Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
return new ConstructorInterceptPoint[] {
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParser.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParser.java
index b978121..721d177 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParser.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParser.java
@@ -31,7 +31,7 @@ public class URLParser {
private static final String MYSQL_JDBC_URL_PREFIX = "jdbc:mysql";
private static final String ORACLE_JDBC_URL_PREFIX = "jdbc:oracle";
- private static final String H2_JDBC_URL_PREFIX = "jdbc:h2";
+ private static final String H2_JDBC_URL_PREFIX = "jdbc:jdbc";
private static final String POSTGRESQL_JDBC_URL_PREFIX = "jdbc:postgresql";
public static ConnectionInfo parser(String url) {
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/trace/ConnectionInfo.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/trace/ConnectionInfo.java
index bed5f6b..d5a556e 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/trace/ConnectionInfo.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/trace/ConnectionInfo.java
@@ -28,7 +28,7 @@ import org.apache.skywalking.apm.network.trace.component.OfficialComponent;
*/
public class ConnectionInfo {
/**
- * DB type, such as mysql, oracle, h2.
+ * DB type, such as mysql, oracle, jdbc.
*/
private final String dbType;
/**
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParserTest.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParserTest.java
index a8d7017..7eca4db 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParserTest.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParserTest.java
@@ -116,7 +116,7 @@ public class URLParserTest {
@Test
public void testParseH2JDBCURLWithEmbedded() {
- ConnectionInfo connectionInfo = new URLParser().parser("jdbc:h2:file:/data/sample");
+ ConnectionInfo connectionInfo = new URLParser().parser("jdbc:jdbc:file:/data/sample");
assertThat(connectionInfo.getDBType(), is("H2"));
assertThat(connectionInfo.getDatabaseName(), is("/data/sample"));
assertThat(connectionInfo.getDatabasePeer(), is("localhost:-1"));
@@ -124,7 +124,7 @@ public class URLParserTest {
@Test
public void testParseH2JDBCURLWithEmbeddedRunningInWindows() {
- ConnectionInfo connectionInfo = new URLParser().parser("jdbc:h2:file:C:/data/sample");
+ ConnectionInfo connectionInfo = new URLParser().parser("jdbc:jdbc:file:C:/data/sample");
assertThat(connectionInfo.getDBType(), is("H2"));
assertThat(connectionInfo.getDatabaseName(), is("C:/data/sample"));
assertThat(connectionInfo.getDatabasePeer(), is("localhost:-1"));
@@ -132,7 +132,7 @@ public class URLParserTest {
@Test
public void testParseH2JDBCURLWithMemoryMode() {
- ConnectionInfo connectionInfo = new URLParser().parser("jdbc:h2:mem:test_mem");
+ ConnectionInfo connectionInfo = new URLParser().parser("jdbc:jdbc:mem:test_mem");
assertThat(connectionInfo.getDBType(), is("H2"));
assertThat(connectionInfo.getDatabaseName(), is("test_mem"));
assertThat(connectionInfo.getDatabasePeer(), is("localhost:-1"));
@@ -140,7 +140,7 @@ public class URLParserTest {
@Test
public void testParseH2JDBCURL() {
- ConnectionInfo connectionInfo = new URLParser().parser("jdbc:h2:tcp://localhost:8084/~/sample");
+ ConnectionInfo connectionInfo = new URLParser().parser("jdbc:jdbc:tcp://localhost:8084/~/sample");
assertThat(connectionInfo.getDBType(), is("H2"));
assertThat(connectionInfo.getDatabaseName(), is("sample"));
assertThat(connectionInfo.getDatabasePeer(), is("localhost:8084"));
diff --git a/oap-server/pom.xml b/oap-server/pom.xml
index c2995ce..8652efa 100644
--- a/oap-server/pom.xml
+++ b/oap-server/pom.xml
@@ -60,6 +60,7 @@
<elasticsearch.version>6.3.2</elasticsearch.version>
<joda-time.version>2.9.9</joda-time.version>
<kubernetes.version>2.0.0</kubernetes.version>
+ <hikaricp.version>3.1.0</hikaricp.version>
</properties>
<dependencies>
@@ -261,6 +262,11 @@
<artifactId>client-java</artifactId>
<version>${kubernetes.version}</version>
</dependency>
+ <dependency>
+ <groupId>com.zaxxer</groupId>
+ <artifactId>HikariCP</artifactId>
+ <version>${hikaricp.version}</version>
+ </dependency>
</dependencies>
</dependencyManagement>
</project>
\ No newline at end of file
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageException.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageException.java
index b9a4d94..8f321a1 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageException.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageException.java
@@ -26,4 +26,8 @@ public class StorageException extends Exception {
public StorageException(String message) {
super(message);
}
+
+ public StorageException(String message, Throwable cause) {
+ super(message, cause);
+ }
}
diff --git a/oap-server/server-library/library-client/pom.xml b/oap-server/server-library/library-client/pom.xml
index a8a6bd5..26cc854 100644
--- a/oap-server/server-library/library-client/pom.xml
+++ b/oap-server/server-library/library-client/pom.xml
@@ -36,8 +36,8 @@
<artifactId>grpc-core</artifactId>
</dependency>
<dependency>
- <groupId>com.h2database</groupId>
- <artifactId>h2</artifactId>
+ <groupId>com.zaxxer</groupId>
+ <artifactId>HikariCP</artifactId>
</dependency>
<dependency>
<groupId>io.shardingjdbc</groupId>
diff --git a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/h2/H2Client.java b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/h2/H2Client.java
deleted file mode 100644
index 41a24ed..0000000
--- a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/h2/H2Client.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * 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.library.client.h2;
-
-import java.sql.*;
-import org.apache.skywalking.oap.server.library.client.Client;
-import org.h2.util.IOUtils;
-import org.slf4j.*;
-
-/**
- * @author peng-yongsheng
- */
-public class H2Client implements Client {
-
- private final Logger logger = LoggerFactory.getLogger(H2Client.class);
-
- private Connection conn;
- private String url;
- private String userName;
- private String password;
-
- public H2Client() {
- this.url = "jdbc:h2:mem:collector";
- this.userName = "";
- this.password = "";
- }
-
- public H2Client(String url, String userName, String password) {
- this.url = url;
- this.userName = userName;
- this.password = password;
- }
-
- @Override public void initialize() throws H2ClientException {
- try {
- Class.forName("org.h2.Driver");
- conn = DriverManager.
- getConnection(this.url, this.userName, this.password);
- } catch (Exception e) {
- throw new H2ClientException(e.getMessage(), e);
- }
- }
-
- @Override public void shutdown() {
- IOUtils.closeSilently(conn);
- }
-
- public Connection getConnection() {
- return conn;
- }
-
- public void execute(String sql) throws H2ClientException {
- try (Statement statement = getConnection().createStatement()) {
- statement.execute(sql);
- statement.closeOnCompletion();
- } catch (SQLException e) {
- throw new H2ClientException(e.getMessage(), e);
- }
- }
-
- public ResultSet executeQuery(String sql, Object[] params) throws H2ClientException {
- logger.debug("execute query with result: {}", sql);
- ResultSet rs;
- PreparedStatement statement;
- try {
- statement = getConnection().prepareStatement(sql);
- if (params != null) {
- for (int i = 0; i < params.length; i++) {
- statement.setObject(i + 1, params[i]);
- }
- }
- rs = statement.executeQuery();
- statement.closeOnCompletion();
- } catch (SQLException e) {
- throw new H2ClientException(e.getMessage(), e);
- }
- return rs;
- }
-
- public boolean execute(String sql, Object[] params) throws H2ClientException {
- logger.debug("execute insert/update/delete: {}", sql);
- boolean flag;
- Connection conn = getConnection();
- try (PreparedStatement statement = conn.prepareStatement(sql)) {
- conn.setAutoCommit(true);
- if (params != null) {
- for (int i = 0; i < params.length; i++) {
- statement.setObject(i + 1, params[i]);
- }
- }
- flag = statement.execute();
- } catch (SQLException e) {
- throw new H2ClientException(e.getMessage(), e);
- }
- return flag;
- }
-}
diff --git a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/h2/H2ClientException.java b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/jdbc/JDBCClientException.java
similarity index 78%
rename from oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/h2/H2ClientException.java
rename to oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/jdbc/JDBCClientException.java
index 4c2d8c7..7a96711 100644
--- a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/h2/H2ClientException.java
+++ b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/jdbc/JDBCClientException.java
@@ -16,20 +16,21 @@
*
*/
-package org.apache.skywalking.oap.server.library.client.h2;
+package org.apache.skywalking.oap.server.library.client.jdbc;
import org.apache.skywalking.oap.server.library.client.ClientException;
/**
- * @author peng-yongsheng
+ * @author wusheng
*/
-public class H2ClientException extends ClientException {
+public class JDBCClientException extends ClientException {
- public H2ClientException(String message) {
+ public JDBCClientException(String message) {
super(message);
}
- public H2ClientException(String message, Throwable cause) {
+ public JDBCClientException(String message, Throwable cause) {
super(message, cause);
}
}
+
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
new file mode 100644
index 0000000..07e474e
--- /dev/null
+++ b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/jdbc/hikaricp/JDBCHikariCPClient.java
@@ -0,0 +1,127 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.library.client.jdbc.hikaricp;
+
+import com.zaxxer.hikari.HikariConfig;
+import com.zaxxer.hikari.HikariDataSource;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Properties;
+import org.apache.skywalking.oap.server.library.client.Client;
+import org.apache.skywalking.oap.server.library.client.ClientException;
+import org.apache.skywalking.oap.server.library.client.jdbc.JDBCClientException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * JDBC Client uses HikariCP connection management lib to execute SQL.
+ *
+ * @author wusheng
+ */
+public class JDBCHikariCPClient implements Client {
+ private final Logger logger = LoggerFactory.getLogger(JDBCHikariCPClient.class);
+
+ private HikariDataSource dataSource;
+ private HikariConfig hikariConfig;
+
+ public JDBCHikariCPClient(Properties properties) {
+ hikariConfig = new HikariConfig(properties);
+ }
+
+ @Override public void initialize() throws ClientException {
+ dataSource = new HikariDataSource(hikariConfig);
+ }
+
+ @Override public void shutdown() {
+ }
+
+ public Connection getConnection() throws JDBCClientException {
+ try {
+ return dataSource.getConnection();
+ } catch (SQLException e) {
+ throw new JDBCClientException(e.getMessage(), e);
+ }
+ }
+
+ public void execute(String sql) throws JDBCClientException {
+ try (Connection conn = getConnection()) {
+ try (Statement statement = conn.createStatement()) {
+ statement.execute(sql);
+ statement.closeOnCompletion();
+ } catch (SQLException e) {
+ throw new JDBCClientException(e.getMessage(), e);
+ }
+ } catch (SQLException e) {
+ throw new JDBCClientException(e.getMessage(), e);
+ }
+ }
+
+ public ResultSet executeQuery(String sql, Object[] params) throws JDBCClientException {
+ logger.debug("execute query with result: {}", sql);
+ ResultSet rs;
+ try (Connection conn = getConnection()) {
+ conn.setReadOnly(true);
+ try (PreparedStatement statement = conn.prepareStatement(sql)) {
+ if (params != null) {
+ for (int i = 0; i < params.length; i++) {
+ statement.setObject(i + 1, params[i]);
+ }
+ }
+ rs = statement.executeQuery();
+ statement.closeOnCompletion();
+ } catch (SQLException e) {
+ throw new JDBCClientException(e.getMessage(), e);
+ }
+ } catch (SQLException e) {
+ throw new JDBCClientException(e.getMessage(), e);
+ }
+
+ return rs;
+ }
+
+ public boolean execute(String sql, Object[] params) throws JDBCClientException {
+ logger.debug("execute insert/update/delete: {}", sql);
+ boolean flag;
+ try (Connection conn = getConnection()) {
+ /**
+ * Notice, SkyWalking is an observability system,
+ * no transaction required.
+ */
+ conn.setAutoCommit(true);
+ try (PreparedStatement statement = conn.prepareStatement(sql)) {
+ conn.setAutoCommit(true);
+ if (params != null) {
+ for (int i = 0; i < params.length; i++) {
+ statement.setObject(i + 1, params[i]);
+ }
+ }
+ flag = statement.execute();
+ statement.closeOnCompletion();
+ } catch (SQLException e) {
+ throw new JDBCClientException(e.getMessage(), e);
+ }
+ } catch (SQLException e) {
+ throw new JDBCClientException(e.getMessage(), e);
+ }
+ return flag;
+ }
+}
diff --git a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClient.java b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClient.java
deleted file mode 100644
index 3fb7559..0000000
--- a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClient.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * 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.library.client.shardingjdbc;
-
-import io.shardingjdbc.core.api.ShardingDataSourceFactory;
-import io.shardingjdbc.core.api.config.ShardingRuleConfiguration;
-import java.sql.*;
-import java.util.*;
-import javax.sql.DataSource;
-import org.apache.commons.dbcp.BasicDataSource;
-import org.apache.skywalking.oap.server.library.client.Client;
-import org.slf4j.*;
-
-/**
- * @author linjiaqi
- */
-public class ShardingjdbcClient implements Client {
-
- private static final Logger logger = LoggerFactory.getLogger(ShardingjdbcClient.class);
-
- private Map<String, ShardingjdbcClientConfig> shardingjdbcClientConfig;
-
- private ShardingRuleConfiguration shardingRuleConfiguration;
-
- private Map<String, DataSource> shardingDataSource = new HashMap<String, DataSource>();
-
- private DataSource dataSource;
-
- public ShardingjdbcClient(Map<String, ShardingjdbcClientConfig> shardingjdbcClientConfig,
- ShardingRuleConfiguration shardingRuleConfiguration) {
- this.shardingjdbcClientConfig = shardingjdbcClientConfig;
- this.shardingRuleConfiguration = shardingRuleConfiguration;
- }
-
- @Override public void initialize() throws ShardingjdbcClientException {
- try {
- shardingjdbcClientConfig.forEach((key, value) -> {
- BasicDataSource basicDataSource = new BasicDataSource();
- basicDataSource.setDriverClassName(value.getDriverClass());
- basicDataSource.setUrl(value.getUrl());
- basicDataSource.setUsername(value.getUserName());
- basicDataSource.setPassword(value.getPassword());
- shardingDataSource.put(key, basicDataSource);
- logger.info("add sharding datasource: {}, url: {}", key, value.getUrl());
- });
- dataSource = ShardingDataSourceFactory.createDataSource(shardingDataSource, shardingRuleConfiguration,
- new HashMap<String, Object>(), new Properties());
- } catch (Exception e) {
- logger.error("case the exception is 'Cannot load JDBC driver class', please add the driver mysql-connector-java-5.1.36.jar to collector-libs manual");
- throw new ShardingjdbcClientException(e.getMessage(), e);
- }
- }
-
- @Override public void shutdown() {
-
- }
-
- public Connection getConnection() throws SQLException {
- return dataSource.getConnection();
- }
-
- public void execute(String sql) throws ShardingjdbcClientException {
- Connection conn = null;
- Statement statement = null;
- try {
- conn = getConnection();
- statement = conn.createStatement();
- statement.execute(sql);
- } catch (SQLException e) {
- throw new ShardingjdbcClientException(e.getMessage(), e);
- } finally {
- try {
- if (statement != null) {
- statement.close();
- }
- if (conn != null) {
- conn.close();
- }
- } catch (SQLException e) {
- throw new ShardingjdbcClientException(e.getMessage(), e);
- }
- }
- }
-
- public ResultSet executeQuery(String sql, Object[] params) throws ShardingjdbcClientException {
- logger.debug("execute query with result: {}", sql);
- ResultSet rs;
- PreparedStatement statement;
- try {
- statement = getConnection().prepareStatement(sql);
- if (params != null) {
- for (int i = 0; i < params.length; i++) {
- statement.setObject(i + 1, params[i]);
- }
- }
- rs = statement.executeQuery();
- } catch (SQLException e) {
- throw new ShardingjdbcClientException(e.getMessage(), e);
- }
- return rs;
- }
-
- public boolean execute(String sql, Object[] params) throws ShardingjdbcClientException {
- logger.debug("execute insert/update/delete: {}", sql);
- boolean flag;
- Connection conn = null;
- PreparedStatement statement = null;
- try {
- conn = getConnection();
- conn.setAutoCommit(true);
- statement = conn.prepareStatement(sql);
- if (params != null) {
- for (int i = 0; i < params.length; i++) {
- statement.setObject(i + 1, params[i]);
- }
- }
- flag = statement.execute();
- } catch (SQLException e) {
- throw new ShardingjdbcClientException(e.getMessage(), e);
- } finally {
- try {
- if (statement != null) {
- statement.close();
- }
- if (conn != null) {
- conn.close();
- }
- } catch (SQLException e) {
- throw new ShardingjdbcClientException(e.getMessage(), e);
- }
- }
- return flag;
- }
-}
diff --git a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClientConfig.java b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClientConfig.java
deleted file mode 100644
index 08edb35..0000000
--- a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClientConfig.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * 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.library.client.shardingjdbc;
-
-/**
- * @author linjiaqi
- */
-public class ShardingjdbcClientConfig {
-
- private String driverClass;
- private String url;
- private String userName;
- private String password;
-
- public ShardingjdbcClientConfig() {
-
- }
-
- public ShardingjdbcClientConfig(String driverClass, String url, String username, String password) {
- this.driverClass = driverClass;
- this.url = url;
- this.userName = username;
- this.password = password;
- }
-
- public String getDriverClass() {
- return driverClass;
- }
-
- public void setDriverClass(String driverClass) {
- this.driverClass = driverClass;
- }
-
- public String getUrl() {
- return url;
- }
-
- public void setUrl(String url) {
- this.url = url;
- }
-
- public String getUserName() {
- return userName;
- }
-
- public void setUserName(String userName) {
- this.userName = userName;
- }
-
- public String getPassword() {
- return password;
- }
-
- public void setPassword(String password) {
- this.password = password;
- }
-}
diff --git a/oap-server/server-starter/pom.xml b/oap-server/server-starter/pom.xml
index b4845a7..8d99daf 100644
--- a/oap-server/server-starter/pom.xml
+++ b/oap-server/server-starter/pom.xml
@@ -85,7 +85,7 @@
<!-- storage module -->
<dependency>
<groupId>org.apache.skywalking</groupId>
- <artifactId>storage-h2-plugin</artifactId>
+ <artifactId>storage-jdbc-hikaricp-plugin</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
diff --git a/oap-server/server-starter/src/main/resources/application.yml b/oap-server/server-starter/src/main/resources/application.yml
index 9290a93..9a58c5b 100644
--- a/oap-server/server-starter/src/main/resources/application.yml
+++ b/oap-server/server-starter/src/main/resources/application.yml
@@ -34,21 +34,22 @@ core:
gRPCHost: 0.0.0.0
gRPCPort: 11800
storage:
- elasticsearch:
- clusterNodes: localhost:9200
- indexShardsNumber: 2
- indexReplicasNumber: 0
- # Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.html
- bulkActions: 2000 # Execute the bulk every 2000 requests
- bulkSize: 20 # flush the bulk every 20mb
- flushInterval: 10 # flush the bulk every 10 seconds whatever the number of requests
- concurrentRequests: 2 # the number of concurrent requests
- # Set a timeout on metric data. After the timeout has expired, the metric data will automatically be deleted.
- traceDataTTL: 90 # Unit is minute
- minuteMetricDataTTL: 90 # Unit is minute
- hourMetricDataTTL: 36 # Unit is hour
- dayMetricDataTTL: 45 # Unit is day
- monthMetricDataTTL: 18 # Unit is month
+ h2:
+# elasticsearch:
+# clusterNodes: localhost:9200
+# indexShardsNumber: 2
+# indexReplicasNumber:
+# # Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.html
+# bulkActions: 2000 # Execute the bulk every 2000 requests
+# bulkSize: 20 # flush the bulk every 20mb
+# flushInterval: 10 # flush the bulk every 10 seconds whatever the number of requests
+# concurrentRequests: 2 # the number of concurrent requests
+# # Set a timeout on metric data. After the timeout has expired, the metric data will automatically be deleted.
+# traceDataTTL: 90 # Unit is minute
+# minuteMetricDataTTL: 90 # Unit is minute
+# hourMetricDataTTL: 36 # Unit is hour
+# dayMetricDataTTL: 45 # Unit is day
+# monthMetricDataTTL: 18 # Unit is month
receiver-register:
default:
receiver-trace:
diff --git a/oap-server/server-storage-plugin/pom.xml b/oap-server/server-storage-plugin/pom.xml
index ff237b0..48d5ac9 100644
--- a/oap-server/server-storage-plugin/pom.xml
+++ b/oap-server/server-storage-plugin/pom.xml
@@ -30,7 +30,7 @@
<artifactId>server-storage-plugin</artifactId>
<packaging>pom</packaging>
<modules>
- <module>storage-h2-plugin</module>
+ <module>storage-jdbc-hikaricp-plugin</module>
<module>storage-elasticsearch-plugin</module>
</modules>
diff --git a/oap-server/server-storage-plugin/storage-h2-plugin/pom.xml b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/pom.xml
similarity index 67%
rename from oap-server/server-storage-plugin/storage-h2-plugin/pom.xml
rename to oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/pom.xml
index 2cb644e..523467e 100644
--- a/oap-server/server-storage-plugin/storage-h2-plugin/pom.xml
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/pom.xml
@@ -27,7 +27,24 @@
</parent>
<modelVersion>4.0.0</modelVersion>
- <artifactId>storage-h2-plugin</artifactId>
+ <artifactId>storage-jdbc-hikaricp-plugin</artifactId>
<packaging>jar</packaging>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.skywalking</groupId>
+ <artifactId>server-core</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.skywalking</groupId>
+ <artifactId>library-client</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>h2</artifactId>
+ </dependency>
+ </dependencies>
+
</project>
\ No newline at end of file
diff --git a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/h2/H2ClientConfig.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/SQLBuilder.java
similarity index 53%
copy from oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/h2/H2ClientConfig.java
copy to oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/SQLBuilder.java
index 764d906..f74b1b6 100644
--- a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/h2/H2ClientConfig.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/SQLBuilder.java
@@ -16,38 +16,42 @@
*
*/
-package org.apache.skywalking.oap.server.library.client.h2;
+package org.apache.skywalking.oap.server.storage.plugin.jdbc;
/**
- * @author peng-yongsheng
+ * SQLBuilder
+ *
+ * @author wusheng
*/
-public abstract class H2ClientConfig {
+public class SQLBuilder {
+ private static String LINE_END = System.lineSeparator();
- private String url;
- private String userName;
- private String password;
+ private StringBuilder text;
- public String getUrl() {
- return url;
+ public SQLBuilder() {
+ this.text = new StringBuilder();
}
- public void setUrl(String url) {
- this.url = url;
+ public SQLBuilder(String initLine) {
+ this();
+ this.appendLine(initLine);
}
- public String getUserName() {
- return userName;
+ public SQLBuilder append(String fragment) {
+ text.append(fragment);
+ return this;
}
- public void setUserName(String userName) {
- this.userName = userName;
+ public SQLBuilder appendLine(String line) {
+ text.append(line).append(LINE_END);
+ return this;
}
- public String getPassword() {
- return password;
+ public String toStringInNewLine() {
+ return LINE_END + toString();
}
- public void setPassword(String password) {
- this.password = password;
+ @Override public String toString() {
+ return text.toString();
}
}
diff --git a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClientException.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/SQLExecutor.java
similarity index 66%
copy from oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClientException.java
copy to oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/SQLExecutor.java
index e8ee50a..4cd33c8 100644
--- a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClientException.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/SQLExecutor.java
@@ -16,20 +16,24 @@
*
*/
-package org.apache.skywalking.oap.server.library.client.shardingjdbc;
+package org.apache.skywalking.oap.server.storage.plugin.jdbc;
-import org.apache.skywalking.oap.server.library.client.ClientException;
+import java.util.List;
+import lombok.AccessLevel;
+import lombok.Getter;
/**
- * @author linjiaqi
+ * A SQL executor.
+ *
+ * @author wusheng
*/
-public class ShardingjdbcClientException extends ClientException {
-
- public ShardingjdbcClientException(String message) {
- super(message);
- }
+@Getter(AccessLevel.PUBLIC)
+public class SQLExecutor {
+ private String sql;
+ private List<Object> param;
- public ShardingjdbcClientException(String message, Throwable cause) {
- super(message, cause);
+ public SQLExecutor(String sql, List<Object> param) {
+ this.sql = sql;
+ this.param = param;
}
}
diff --git a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClientException.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/TableMetaInfo.java
similarity index 64%
copy from oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClientException.java
copy to oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/TableMetaInfo.java
index e8ee50a..752728e 100644
--- a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClientException.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/TableMetaInfo.java
@@ -16,20 +16,23 @@
*
*/
-package org.apache.skywalking.oap.server.library.client.shardingjdbc;
+package org.apache.skywalking.oap.server.storage.plugin.jdbc;
-import org.apache.skywalking.oap.server.library.client.ClientException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.skywalking.oap.server.core.storage.model.Model;
/**
- * @author linjiaqi
+ * @author wusheng
*/
-public class ShardingjdbcClientException extends ClientException {
+public class TableMetaInfo {
+ private static Map<String, Model> TABLES = new HashMap<>();
- public ShardingjdbcClientException(String message) {
- super(message);
+ public static void addModel(Model model) {
+ TABLES.put(model.getName(), model);
}
- public ShardingjdbcClientException(String message, Throwable cause) {
- super(message, cause);
+ public static Model get(String moduleName) {
+ return TABLES.get(moduleName);
}
}
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageException.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/H2StorageConfig.java
similarity index 79%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageException.java
copy to oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/H2StorageConfig.java
index b9a4d94..a2d2aad 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageException.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/H2StorageConfig.java
@@ -16,14 +16,12 @@
*
*/
-package org.apache.skywalking.oap.server.core.storage;
+package org.apache.skywalking.oap.server.storage.plugin.jdbc.h2;
+
+import org.apache.skywalking.oap.server.library.module.ModuleConfig;
/**
- * @author peng-yongsheng
+ * @author wusheng
*/
-public class StorageException extends Exception {
-
- public StorageException(String message) {
- super(message);
- }
+public class H2StorageConfig extends ModuleConfig {
}
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
new file mode 100644
index 0000000..feb0d9d
--- /dev/null
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/H2StorageProvider.java
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.storage.plugin.jdbc.h2;
+
+import java.util.Properties;
+import org.apache.skywalking.oap.server.core.storage.IBatchDAO;
+import org.apache.skywalking.oap.server.core.storage.IRegisterLockDAO;
+import org.apache.skywalking.oap.server.core.storage.StorageDAO;
+import org.apache.skywalking.oap.server.core.storage.StorageException;
+import org.apache.skywalking.oap.server.core.storage.StorageModule;
+import org.apache.skywalking.oap.server.core.storage.cache.IEndpointInventoryCacheDAO;
+import org.apache.skywalking.oap.server.core.storage.cache.INetworkAddressInventoryCacheDAO;
+import org.apache.skywalking.oap.server.core.storage.cache.IServiceInstanceInventoryCacheDAO;
+import org.apache.skywalking.oap.server.core.storage.cache.IServiceInventoryCacheDAO;
+import org.apache.skywalking.oap.server.core.storage.query.ITopologyQueryDAO;
+import org.apache.skywalking.oap.server.library.client.ClientException;
+import org.apache.skywalking.oap.server.library.client.jdbc.hikaricp.JDBCHikariCPClient;
+import org.apache.skywalking.oap.server.library.module.ModuleConfig;
+import org.apache.skywalking.oap.server.library.module.ModuleDefine;
+import org.apache.skywalking.oap.server.library.module.ModuleProvider;
+import org.apache.skywalking.oap.server.library.module.ModuleStartException;
+import org.apache.skywalking.oap.server.library.module.ServiceNotProvidedException;
+import org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao.H2BatchDAO;
+import org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao.H2EndpointInventoryCacheDAO;
+import org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao.H2NetworkAddressInventoryCacheDAO;
+import org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao.H2RegisterLockDAO;
+import org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao.H2ServiceInstanceInventoryCacheDAO;
+import org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao.H2ServiceInventoryCacheDAO;
+import org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao.H2StorageDAO;
+import org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao.H2TableInstaller;
+import org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao.H2TopologyQueryDAO;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author wusheng
+ */
+public class H2StorageProvider extends ModuleProvider {
+
+ private static final Logger logger = LoggerFactory.getLogger(H2StorageProvider.class);
+
+ private H2StorageConfig config;
+ private JDBCHikariCPClient h2Client;
+
+ public H2StorageProvider() {
+ config = new H2StorageConfig();
+ }
+
+ @Override public String name() {
+ return "h2";
+ }
+
+ @Override public Class<? extends ModuleDefine> module() {
+ return StorageModule.class;
+ }
+
+ @Override public ModuleConfig createConfigBeanIfAbsent() {
+ return config;
+ }
+
+ @Override public void prepare() throws ServiceNotProvidedException, ModuleStartException {
+ Properties settings = new Properties();
+ settings.setProperty("dataSourceClassName", "org.h2.jdbcx.JdbcDataSource");
+ settings.setProperty("dataSource.url", "jdbc:h2:mem:collector");
+ settings.setProperty("dataSource.user", "");
+ settings.setProperty("dataSource.password", "");
+ h2Client = new JDBCHikariCPClient(settings);
+
+ this.registerServiceImplementation(IBatchDAO.class, new H2BatchDAO());
+ this.registerServiceImplementation(StorageDAO.class, new H2StorageDAO(h2Client));
+ this.registerServiceImplementation(IRegisterLockDAO.class, new H2RegisterLockDAO());
+
+ this.registerServiceImplementation(IServiceInventoryCacheDAO.class, new H2ServiceInventoryCacheDAO());
+ this.registerServiceImplementation(IServiceInstanceInventoryCacheDAO.class, new H2ServiceInstanceInventoryCacheDAO());
+ this.registerServiceImplementation(IEndpointInventoryCacheDAO.class, new H2EndpointInventoryCacheDAO());
+ this.registerServiceImplementation(INetworkAddressInventoryCacheDAO.class, new H2NetworkAddressInventoryCacheDAO());
+
+ this.registerServiceImplementation(ITopologyQueryDAO.class, new H2TopologyQueryDAO());
+
+ }
+
+ @Override public void start() throws ServiceNotProvidedException, ModuleStartException {
+ try {
+ h2Client.initialize();
+
+ H2TableInstaller installer = new H2TableInstaller(getManager());
+ installer.install(h2Client);
+ } catch (StorageException e) {
+ throw new ModuleStartException(e.getMessage(), e);
+ } catch (ClientException e) {
+ throw new ModuleStartException(e.getMessage(), e);
+ }
+ }
+
+ @Override public void notifyAfterCompleted() throws ServiceNotProvidedException, ModuleStartException {
+
+ }
+
+ @Override public String[] requiredModules() {
+ return new String[0];
+ }
+}
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageException.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
similarity index 74%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageException.java
copy to 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 b9a4d94..a252733 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageException.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
@@ -16,14 +16,13 @@
*
*/
-package org.apache.skywalking.oap.server.core.storage;
+package org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao;
-/**
- * @author peng-yongsheng
- */
-public class StorageException extends Exception {
+import java.util.List;
+import org.apache.skywalking.oap.server.core.storage.IBatchDAO;
+
+public class H2BatchDAO implements IBatchDAO {
+ @Override public void batchPersistence(List<?> batchCollection) {
- public StorageException(String message) {
- super(message);
}
}
diff --git a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClientException.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2EndpointInventoryCacheDAO.java
similarity index 62%
copy from oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClientException.java
copy to oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2EndpointInventoryCacheDAO.java
index e8ee50a..5f61d4a 100644
--- a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClientException.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2EndpointInventoryCacheDAO.java
@@ -16,20 +16,20 @@
*
*/
-package org.apache.skywalking.oap.server.library.client.shardingjdbc;
+package org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao;
-import org.apache.skywalking.oap.server.library.client.ClientException;
+import org.apache.skywalking.oap.server.core.register.EndpointInventory;
+import org.apache.skywalking.oap.server.core.storage.cache.IEndpointInventoryCacheDAO;
/**
- * @author linjiaqi
+ * @author wusheng
*/
-public class ShardingjdbcClientException extends ClientException {
-
- public ShardingjdbcClientException(String message) {
- super(message);
+public class H2EndpointInventoryCacheDAO implements IEndpointInventoryCacheDAO {
+ @Override public int getEndpointId(int serviceId, String endpointName) {
+ return 0;
}
- public ShardingjdbcClientException(String message, Throwable cause) {
- super(message, cause);
+ @Override public EndpointInventory get(int endpointId) {
+ return null;
}
}
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
new file mode 100644
index 0000000..6043079
--- /dev/null
+++ 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
@@ -0,0 +1,124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.storage.plugin.jdbc.h2.dao;
+
+import java.io.IOException;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.skywalking.oap.server.core.analysis.indicator.Indicator;
+import org.apache.skywalking.oap.server.core.storage.IIndicatorDAO;
+import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
+import org.apache.skywalking.oap.server.core.storage.model.ModelColumn;
+import org.apache.skywalking.oap.server.core.storage.type.StorageDataType;
+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.SQLBuilder;
+import org.apache.skywalking.oap.server.storage.plugin.jdbc.SQLExecutor;
+import org.apache.skywalking.oap.server.storage.plugin.jdbc.TableMetaInfo;
+
+/**
+ * @author wusheng
+ */
+public class H2IndicatorDAO implements IIndicatorDAO<SQLExecutor, SQLExecutor> {
+ private JDBCHikariCPClient h2Client;
+ private StorageBuilder<Indicator> storageBuilder;
+
+ public H2IndicatorDAO(JDBCHikariCPClient h2Client, StorageBuilder<Indicator> storageBuilder) {
+ this.h2Client = h2Client;
+ this.storageBuilder = storageBuilder;
+ }
+
+ @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()})) {
+ while (rs.next()) {
+ Map data = new HashMap();
+ List<ModelColumn> columns = TableMetaInfo.get(modelName).getColumns();
+ for (ModelColumn column : columns) {
+ data.put(column.getColumnName(), rs.getObject(column.getColumnName().getName()));
+ }
+ return storageBuilder.map2Data(data);
+ }
+ } catch (SQLException e) {
+ throw new IOException(e.getMessage(), e);
+ } catch (JDBCClientException e) {
+ throw new IOException(e.getMessage(), e);
+ }
+ return null;
+ }
+
+ @Override public SQLExecutor prepareBatchInsert(String modelName, Indicator indicator) throws IOException {
+ Map<String, Object> objectMap = storageBuilder.data2Map(indicator);
+
+ SQLBuilder sqlBuilder = new SQLBuilder("INSERT INTO " + modelName + " VALUES");
+ List<ModelColumn> columns = TableMetaInfo.get(modelName).getColumns();
+ List<Object> param = new ArrayList<>();
+ sqlBuilder.append("(");
+ for (int i = 0; i < columns.size(); i++) {
+ ModelColumn column = columns.get(i);
+ sqlBuilder.append("?");
+ if (i != columns.size()) {
+ sqlBuilder.append(",");
+ }
+
+ Object value = objectMap.get(column.getColumnName().getName());
+ if (value instanceof StorageDataType) {
+ param.add(((StorageDataType)value).toStorageData());
+ } else {
+ param.add(value);
+ }
+ }
+ sqlBuilder.append(")");
+
+ return new SQLExecutor(sqlBuilder.toString(), param);
+ }
+
+ @Override public SQLExecutor prepareBatchUpdate(String modelName, Indicator indicator) throws IOException {
+ Map<String, Object> objectMap = storageBuilder.data2Map(indicator);
+
+ SQLBuilder sqlBuilder = new SQLBuilder("UPDATE " + modelName + " SET ");
+ List<ModelColumn> columns = TableMetaInfo.get(modelName).getColumns();
+ List<Object> param = new ArrayList<>();
+ for (int i = 0; i < columns.size(); i++) {
+ ModelColumn column = columns.get(i);
+ sqlBuilder.append(column.getColumnName().getName() + "= ?");
+ if (i != columns.size()) {
+ sqlBuilder.append(",");
+ }
+
+ Object value = objectMap.get(column.getColumnName().getName());
+ if (value instanceof StorageDataType) {
+ param.add(((StorageDataType)value).toStorageData());
+ } else {
+ param.add(value);
+ }
+ }
+ sqlBuilder.append(" WHERE entity_id = ?");
+ param.add(indicator.id());
+
+ return new SQLExecutor(sqlBuilder.toString(), param);
+ }
+
+ @Override public void deleteHistory(String modelName, Long timeBucketBefore) {
+
+ }
+}
diff --git a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClientException.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2NetworkAddressInventoryCacheDAO.java
similarity index 61%
copy from oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClientException.java
copy to oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2NetworkAddressInventoryCacheDAO.java
index e8ee50a..7a11ed6 100644
--- a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClientException.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2NetworkAddressInventoryCacheDAO.java
@@ -16,20 +16,20 @@
*
*/
-package org.apache.skywalking.oap.server.library.client.shardingjdbc;
+package org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao;
-import org.apache.skywalking.oap.server.library.client.ClientException;
+import org.apache.skywalking.oap.server.core.register.NetworkAddressInventory;
+import org.apache.skywalking.oap.server.core.storage.cache.INetworkAddressInventoryCacheDAO;
/**
- * @author linjiaqi
+ * @author wusheng
*/
-public class ShardingjdbcClientException extends ClientException {
-
- public ShardingjdbcClientException(String message) {
- super(message);
+public class H2NetworkAddressInventoryCacheDAO implements INetworkAddressInventoryCacheDAO {
+ @Override public int getAddressId(String networkAddress) {
+ return 0;
}
- public ShardingjdbcClientException(String message, Throwable cause) {
- super(message, cause);
+ @Override public NetworkAddressInventory get(int addressId) {
+ return null;
}
}
diff --git a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClientException.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2RegisterLockDAO.java
similarity index 61%
copy from oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClientException.java
copy to oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2RegisterLockDAO.java
index e8ee50a..fba9e09 100644
--- a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClientException.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2RegisterLockDAO.java
@@ -16,20 +16,22 @@
*
*/
-package org.apache.skywalking.oap.server.library.client.shardingjdbc;
+package org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao;
-import org.apache.skywalking.oap.server.library.client.ClientException;
+import org.apache.skywalking.oap.server.core.source.Scope;
+import org.apache.skywalking.oap.server.core.storage.IRegisterLockDAO;
/**
- * @author linjiaqi
+ * No need to create any lock table. In SQL based database, could use `select... for update` to avoid lock table.
+ *
+ * @author wusheng
*/
-public class ShardingjdbcClientException extends ClientException {
-
- public ShardingjdbcClientException(String message) {
- super(message);
+public class H2RegisterLockDAO implements IRegisterLockDAO {
+ @Override public boolean tryLock(Scope scope) {
+ return false;
}
- public ShardingjdbcClientException(String message, Throwable cause) {
- super(message, cause);
+ @Override public void releaseLock(Scope scope) {
+
}
}
diff --git a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/h2/H2ClientConfig.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2ServiceInstanceInventoryCacheDAO.java
similarity index 56%
rename from oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/h2/H2ClientConfig.java
rename to oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2ServiceInstanceInventoryCacheDAO.java
index 764d906..a715cb1 100644
--- a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/h2/H2ClientConfig.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2ServiceInstanceInventoryCacheDAO.java
@@ -16,38 +16,24 @@
*
*/
-package org.apache.skywalking.oap.server.library.client.h2;
+package org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao;
+
+import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory;
+import org.apache.skywalking.oap.server.core.storage.cache.IServiceInstanceInventoryCacheDAO;
/**
- * @author peng-yongsheng
+ * @author wusheng
*/
-public abstract class H2ClientConfig {
-
- private String url;
- private String userName;
- private String password;
-
- public String getUrl() {
- return url;
- }
-
- public void setUrl(String url) {
- this.url = url;
- }
-
- public String getUserName() {
- return userName;
- }
-
- public void setUserName(String userName) {
- this.userName = userName;
+public class H2ServiceInstanceInventoryCacheDAO implements IServiceInstanceInventoryCacheDAO {
+ @Override public ServiceInstanceInventory get(int serviceInstanceId) {
+ return null;
}
- public String getPassword() {
- return password;
+ @Override public int getServiceInstanceId(int serviceId, String serviceInstanceName) {
+ return 0;
}
- public void setPassword(String password) {
- this.password = password;
+ @Override public int getServiceInstanceId(int serviceId, int addressId) {
+ return 0;
}
}
diff --git a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClientException.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2ServiceInventoryCacheDAO.java
similarity index 59%
rename from oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClientException.java
rename to oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2ServiceInventoryCacheDAO.java
index e8ee50a..50e882e 100644
--- a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/shardingjdbc/ShardingjdbcClientException.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2ServiceInventoryCacheDAO.java
@@ -16,20 +16,24 @@
*
*/
-package org.apache.skywalking.oap.server.library.client.shardingjdbc;
+package org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao;
-import org.apache.skywalking.oap.server.library.client.ClientException;
+import org.apache.skywalking.oap.server.core.register.ServiceInventory;
+import org.apache.skywalking.oap.server.core.storage.cache.IServiceInventoryCacheDAO;
/**
- * @author linjiaqi
+ * @author wusheng
*/
-public class ShardingjdbcClientException extends ClientException {
+public class H2ServiceInventoryCacheDAO implements IServiceInventoryCacheDAO {
+ @Override public int getServiceId(String serviceName) {
+ return 0;
+ }
- public ShardingjdbcClientException(String message) {
- super(message);
+ @Override public int getServiceId(int addressId) {
+ return 0;
}
- public ShardingjdbcClientException(String message, Throwable cause) {
- super(message, cause);
+ @Override public ServiceInventory get(int serviceId) {
+ return null;
}
}
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
new file mode 100644
index 0000000..2f18d2c
--- /dev/null
+++ 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
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.storage.plugin.jdbc.h2.dao;
+
+import org.apache.skywalking.oap.server.core.analysis.indicator.Indicator;
+import org.apache.skywalking.oap.server.core.register.RegisterSource;
+import org.apache.skywalking.oap.server.core.storage.IIndicatorDAO;
+import org.apache.skywalking.oap.server.core.storage.IRegisterDAO;
+import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
+import org.apache.skywalking.oap.server.core.storage.StorageDAO;
+import org.apache.skywalking.oap.server.library.client.jdbc.hikaricp.JDBCHikariCPClient;
+
+/**
+ * @author wusheng
+ */
+public class H2StorageDAO implements StorageDAO {
+ private JDBCHikariCPClient h2Client;
+
+ public H2StorageDAO(JDBCHikariCPClient h2Client) {
+ this.h2Client = h2Client;
+ }
+
+ @Override public IIndicatorDAO newIndicatorDao(StorageBuilder<Indicator> storageBuilder) {
+ return new H2IndicatorDAO(h2Client, storageBuilder);
+ }
+
+ @Override public IRegisterDAO newRegisterDao(StorageBuilder<RegisterSource> storageBuilder) {
+ return null;
+ }
+}
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
new file mode 100644
index 0000000..815bf63
--- /dev/null
+++ 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
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.storage.plugin.jdbc.h2.dao;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import org.apache.skywalking.oap.server.core.analysis.indicator.IntKeyLongValueArray;
+import org.apache.skywalking.oap.server.core.storage.StorageException;
+import org.apache.skywalking.oap.server.core.storage.model.ColumnName;
+import org.apache.skywalking.oap.server.core.storage.model.Model;
+import org.apache.skywalking.oap.server.core.storage.model.ModelColumn;
+import org.apache.skywalking.oap.server.core.storage.model.ModelInstaller;
+import org.apache.skywalking.oap.server.library.client.Client;
+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.library.module.ModuleManager;
+import org.apache.skywalking.oap.server.storage.plugin.jdbc.SQLBuilder;
+import org.apache.skywalking.oap.server.storage.plugin.jdbc.TableMetaInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class H2TableInstaller extends ModelInstaller {
+ private static final Logger logger = LoggerFactory.getLogger(H2TableInstaller.class);
+
+ public H2TableInstaller(ModuleManager moduleManager) {
+ super(moduleManager);
+ }
+
+ @Override protected boolean isExists(Client client, Model model) throws StorageException {
+ JDBCHikariCPClient h2Client = (JDBCHikariCPClient)client;
+ try (Connection conn = h2Client.getConnection()) {
+ try (ResultSet rset = conn.getMetaData().getTables(null, null, model.getName(), null)) {
+ if (rset.next()) {
+ return true;
+ }
+ }
+ } catch (SQLException e) {
+ throw new StorageException(e.getMessage(), e);
+ } catch (JDBCClientException e) {
+ throw new StorageException(e.getMessage(), e);
+ }
+ return false;
+ }
+
+ @Override protected void columnCheck(Client client, Model model) throws StorageException {
+
+ }
+
+ @Override protected void deleteTable(Client client, Model model) throws StorageException {
+
+ }
+
+ @Override protected void createTable(Client client, Model model) throws StorageException {
+ TableMetaInfo.addModel(model);
+ JDBCHikariCPClient h2Client = (JDBCHikariCPClient)client;
+ SQLBuilder tableCreateSQL = new SQLBuilder("CREATE TABLE " + model.getName() + " (");
+ for (int i = 0; i < model.getColumns().size(); i++) {
+ ModelColumn column = model.getColumns().get(i);
+ ColumnName name = column.getColumnName();
+ tableCreateSQL.appendLine(name.getName() + " " + getColumnType(column.getType()) + (i != model.getColumns().size() - 1 ? "," : ""));
+ }
+ tableCreateSQL.appendLine(")");
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("creating table: " + tableCreateSQL.toStringInNewLine());
+ }
+
+ try {
+ h2Client.execute(tableCreateSQL.toString());
+ } catch (JDBCClientException e) {
+ throw new StorageException(e.getMessage(), e);
+ }
+
+ }
+
+ private String getColumnType(Class<?> type) {
+ if (Integer.class.equals(type) || int.class.equals(type)) {
+ return "INT";
+ } else if (Long.class.equals(type) || long.class.equals(type)) {
+ return "BIGINT";
+ } else if (Double.class.equals(type) || double.class.equals(type)) {
+ return "DOUBLE";
+ } else if (String.class.equals(type)) {
+ return "VARCHAR(2000)";
+ } else if (IntKeyLongValueArray.class.equals(type)) {
+ return "VARCHAR(20000)";
+ } else {
+ throw new IllegalArgumentException("Unsupported data type: " + type.getName());
+ }
+ }
+}
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/H2TopologyQueryDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2TopologyQueryDAO.java
new file mode 100644
index 0000000..06c0fcc
--- /dev/null
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2TopologyQueryDAO.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.storage.plugin.jdbc.h2.dao;
+
+import java.io.IOException;
+import java.util.List;
+import org.apache.skywalking.oap.server.core.query.entity.Call;
+import org.apache.skywalking.oap.server.core.query.entity.Step;
+import org.apache.skywalking.oap.server.core.source.ServiceComponent;
+import org.apache.skywalking.oap.server.core.source.ServiceMapping;
+import org.apache.skywalking.oap.server.core.storage.query.ITopologyQueryDAO;
+
+/**
+ * @author wusheng
+ */
+public class H2TopologyQueryDAO implements ITopologyQueryDAO {
+ @Override public List<Call> loadSpecifiedServerSideServiceRelations(Step step, long startTB, long endTB,
+ List<Integer> serviceIds) throws IOException {
+ return null;
+ }
+
+ @Override public List<Call> loadSpecifiedClientSideServiceRelations(Step step, long startTB, long endTB,
+ List<Integer> serviceIds) throws IOException {
+ return null;
+ }
+
+ @Override public List<Call> loadServerSideServiceRelations(Step step, long startTB, long endTB) throws IOException {
+ return null;
+ }
+
+ @Override public List<Call> loadClientSideServiceRelations(Step step, long startTB, long endTB) throws IOException {
+ return null;
+ }
+
+ @Override public List<ServiceMapping> loadServiceMappings(Step step, long startTB, long endTB) throws IOException {
+ return null;
+ }
+
+ @Override
+ public List<ServiceComponent> loadServiceComponents(Step step, long startTB, long endTB) throws IOException {
+ return null;
+ }
+
+ @Override public List<Call> loadSpecifiedDestOfServerSideEndpointRelations(Step step, long startTB, long endTB,
+ int destEndpointId) throws IOException {
+ return null;
+ }
+
+ @Override public List<Call> loadSpecifiedSourceOfClientSideEndpointRelations(Step step, long startTB, long endTB,
+ int sourceEndpointId) throws IOException {
+ return null;
+ }
+}
diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleProvider b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleProvider
new file mode 100644
index 0000000..86c2c56
--- /dev/null
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleProvider
@@ -0,0 +1,19 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# 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.
+#
+#
+
+org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.H2StorageProvider
\ No newline at end of file