You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ke...@apache.org on 2020/03/30 14:45:18 UTC

[skywalking] 01/01: Fix wrong H2 column type

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

kezhenxu94 pushed a commit to branch bugfix/h2-data-type
in repository https://gitbox.apache.org/repos/asf/skywalking.git

commit 3461a3eab98c3cc812800e3adfd361fd1919a918
Author: kezhenxu94 <ke...@163.com>
AuthorDate: Mon Mar 30 22:44:09 2020 +0800

    Fix wrong H2 column type
    
    MEDIUMTEXT in H2 is CLOB in JDBC type, and casting it to `String` causes `ClassCastException`
---
 .../oap/server/core/storage/model/INewModel.java       |   2 +-
 .../oap/server/core/storage/model/StorageModels.java   |  14 ++++++--------
 .../storage/plugin/jdbc/h2/dao/H2SQLExecutor.java      |  16 ++++++++--------
 .../storage/plugin/jdbc/h2/dao/H2TableInstaller.java   |   2 +-
 test/e2e/e2e-test/docker/jacocoagent.jar               | Bin 0 -> 281427 bytes
 5 files changed, 16 insertions(+), 18 deletions(-)

diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/INewModel.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/INewModel.java
index fab2194..15df48e 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/INewModel.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/INewModel.java
@@ -30,5 +30,5 @@ public interface INewModel extends Service {
      *
      * @return the created new model
      */
-    Model add(Class aClass, int scopeId, Storage storage, boolean record);
+    Model add(Class<?> aClass, int scopeId, Storage storage, boolean record);
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/StorageModels.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/StorageModels.java
index 4d87142..1632468 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/StorageModels.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/StorageModels.java
@@ -43,7 +43,7 @@ public class StorageModels implements IModelManager, INewModel, IModelOverride {
     }
 
     @Override
-    public Model add(Class aClass, int scopeId, Storage storage, boolean record) {
+    public Model add(Class<?> aClass, int scopeId, Storage storage, boolean record) {
         // Check this scope id is valid.
         DefaultScopeDefine.nameOf(scopeId);
 
@@ -67,7 +67,7 @@ public class StorageModels implements IModelManager, INewModel, IModelOverride {
         return model;
     }
 
-    private void retrieval(Class clazz,
+    private void retrieval(Class<?> clazz,
                            String modelName,
                            List<ModelColumn> modelColumns,
                            List<ExtraQueryIndex> extraQueryIndices) {
@@ -100,12 +100,10 @@ public class StorageModels implements IModelManager, INewModel, IModelOverride {
                     Collections.addAll(indexDefinitions, field.getAnnotation(MultipleQueryUnifiedIndex.class).value());
                 }
 
-                indexDefinitions.forEach(indexDefinition -> {
-                    extraQueryIndices.add(new ExtraQueryIndex(
-                        column.columnName(),
-                        indexDefinition.withColumns()
-                    ));
-                });
+                indexDefinitions.forEach(indexDefinition -> extraQueryIndices.add(new ExtraQueryIndex(
+                    column.columnName(),
+                    indexDefinition.withColumns()
+                )));
             }
         }
 
diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2SQLExecutor.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2SQLExecutor.java
index 494f17a..89f0ec4 100644
--- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2SQLExecutor.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2SQLExecutor.java
@@ -46,7 +46,7 @@ public class H2SQLExecutor {
     private static final Logger logger = LoggerFactory.getLogger(H2SQLExecutor.class);
 
     protected List<StorageData> getByIDs(JDBCHikariCPClient h2Client, String modelName, String[] ids,
-        StorageBuilder storageBuilder) throws IOException {
+        StorageBuilder<StorageData> storageBuilder) throws IOException {
 
         try (Connection connection = h2Client.getConnection()) {
             /*
@@ -74,7 +74,7 @@ public class H2SQLExecutor {
     }
 
     protected StorageData getByID(JDBCHikariCPClient h2Client, String modelName, String id,
-        StorageBuilder storageBuilder) throws IOException {
+        StorageBuilder<StorageData> storageBuilder) throws IOException {
         try (Connection connection = h2Client.getConnection()) {
             try (ResultSet rs = h2Client.executeQuery(connection, "SELECT * FROM " + modelName + " WHERE id = ?", id)) {
                 return toStorageData(rs, modelName, storageBuilder);
@@ -85,7 +85,7 @@ public class H2SQLExecutor {
     }
 
     protected StorageData getByColumn(JDBCHikariCPClient h2Client, String modelName, String columnName, Object value,
-        StorageBuilder storageBuilder) throws IOException {
+        StorageBuilder<StorageData> storageBuilder) throws IOException {
         try (Connection connection = h2Client.getConnection()) {
             try (ResultSet rs = h2Client.executeQuery(connection, "SELECT * FROM " + modelName + " WHERE " + columnName + " = ?", value)) {
                 return toStorageData(rs, modelName, storageBuilder);
@@ -96,9 +96,9 @@ public class H2SQLExecutor {
     }
 
     protected StorageData toStorageData(ResultSet rs, String modelName,
-        StorageBuilder storageBuilder) throws SQLException {
+        StorageBuilder<StorageData> storageBuilder) throws SQLException {
         if (rs.next()) {
-            Map data = new HashMap();
+            Map<String, Object> data = new HashMap<>();
             List<ModelColumn> columns = TableMetaInfo.get(modelName).getColumns();
             for (ModelColumn column : columns) {
                 data.put(column.getColumnName().getName(), rs.getObject(column.getColumnName().getStorageName()));
@@ -111,7 +111,7 @@ public class H2SQLExecutor {
     protected int getEntityIDByID(JDBCHikariCPClient h2Client, String entityColumnName, String modelName, String id) {
         try (Connection connection = h2Client.getConnection()) {
             try (ResultSet rs = h2Client.executeQuery(connection, "SELECT " + entityColumnName + " FROM " + modelName + " WHERE ID=?", id)) {
-                while (rs.next()) {
+                if (rs.next()) {
                     return rs.getInt(ServiceInstanceInventory.SEQUENCE);
                 }
             }
@@ -122,7 +122,7 @@ public class H2SQLExecutor {
     }
 
     protected SQLExecutor getInsertExecutor(String modelName, StorageData metrics,
-        StorageBuilder storageBuilder) throws IOException {
+        StorageBuilder<StorageData> storageBuilder) throws IOException {
         Map<String, Object> objectMap = storageBuilder.data2Map(metrics);
 
         SQLBuilder sqlBuilder = new SQLBuilder("INSERT INTO " + modelName + " VALUES");
@@ -150,7 +150,7 @@ public class H2SQLExecutor {
     }
 
     protected SQLExecutor getUpdateExecutor(String modelName, StorageData metrics,
-        StorageBuilder storageBuilder) throws IOException {
+        StorageBuilder<StorageData> storageBuilder) throws IOException {
         Map<String, Object> objectMap = storageBuilder.data2Map(metrics);
 
         SQLBuilder sqlBuilder = new SQLBuilder("UPDATE " + modelName + " SET ");
diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/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 cb172ce..07e5971 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
@@ -92,7 +92,7 @@ public class H2TableInstaller extends ModelInstaller {
         } else if (String.class.equals(type)) {
             return "VARCHAR(" + column.getLength() + ")";
         } else if (IntKeyLongValueHashMap.class.equals(type)) {
-            return "MEDIUMTEXT";
+            return "VARCHAR(20000)";
         } else if (byte[].class.equals(type)) {
             return "MEDIUMTEXT";
         } else {
diff --git a/test/e2e/e2e-test/docker/jacocoagent.jar b/test/e2e/e2e-test/docker/jacocoagent.jar
new file mode 100644
index 0000000..1a9e96d
Binary files /dev/null and b/test/e2e/e2e-test/docker/jacocoagent.jar differ