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 <[email protected]> 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
