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:17 UTC

[skywalking] branch bugfix/h2-data-type created (now 3461a3e)

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

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


      at 3461a3e  Fix wrong H2 column type

This branch includes the following new commits:

     new 3461a3e  Fix wrong H2 column type

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



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

Posted by ke...@apache.org.
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