diff --git a/amoro-ams/pom.xml b/amoro-ams/pom.xml index 98652eeb5b..650c3be313 100644 --- a/amoro-ams/pom.xml +++ b/amoro-ams/pom.xml @@ -228,6 +228,12 @@ derby + + com.dameng + DmJdbcDriver18 + provided + + mysql mysql-connector-java @@ -564,6 +570,7 @@ derby/** mysql/** postgres/** + dameng/** diff --git a/amoro-ams/src/main/java/org/apache/amoro/server/AmoroManagementConf.java b/amoro-ams/src/main/java/org/apache/amoro/server/AmoroManagementConf.java index 8ba5439bd7..35fc154385 100644 --- a/amoro-ams/src/main/java/org/apache/amoro/server/AmoroManagementConf.java +++ b/amoro-ams/src/main/java/org/apache/amoro/server/AmoroManagementConf.java @@ -535,6 +535,7 @@ public class AmoroManagementConf { public static final String DB_TYPE_DERBY = "derby"; public static final String DB_TYPE_MYSQL = "mysql"; public static final String DB_TYPE_POSTGRES = "postgres"; + public static final String DB_TYPE_DAMENG = "dameng"; // terminal config public static final List TERMINAL_BACKEND_VALUES = diff --git a/amoro-ams/src/main/java/org/apache/amoro/server/AmoroManagementConfValidator.java b/amoro-ams/src/main/java/org/apache/amoro/server/AmoroManagementConfValidator.java index bae28f7611..bb6e2d8674 100644 --- a/amoro-ams/src/main/java/org/apache/amoro/server/AmoroManagementConfValidator.java +++ b/amoro-ams/src/main/java/org/apache/amoro/server/AmoroManagementConfValidator.java @@ -35,15 +35,17 @@ public static void validateConfig(Configurations configurations) { AmsUtil.lookForBindHost(configurations.getString(AmoroManagementConf.SERVER_EXPOSE_HOST)); configurations.setString(AmoroManagementConf.SERVER_EXPOSE_HOST, inetAddress.getHostAddress()); - // mysql or postgres config + // mysql or postgres or dameng config if (AmoroManagementConf.DB_TYPE_MYSQL.equalsIgnoreCase( configurations.getString(AmoroManagementConf.DB_TYPE)) || AmoroManagementConf.DB_TYPE_POSTGRES.equalsIgnoreCase( + configurations.getString(AmoroManagementConf.DB_TYPE)) + || AmoroManagementConf.DB_TYPE_DAMENG.equalsIgnoreCase( configurations.getString(AmoroManagementConf.DB_TYPE))) { if ("".equals(configurations.getString(AmoroManagementConf.DB_PASSWORD)) || "".equals(configurations.getString(AmoroManagementConf.DB_USER_NAME))) { throw new IllegalArgumentException( - "username and password must be configured if the database type is mysql or postgres"); + "username and password must be configured if the database type is mysql or postgres or dameng "); } } diff --git a/amoro-ams/src/main/java/org/apache/amoro/server/persistence/DataSourceFactory.java b/amoro-ams/src/main/java/org/apache/amoro/server/persistence/DataSourceFactory.java index 26d1932150..5ac0e19553 100644 --- a/amoro-ams/src/main/java/org/apache/amoro/server/persistence/DataSourceFactory.java +++ b/amoro-ams/src/main/java/org/apache/amoro/server/persistence/DataSourceFactory.java @@ -47,6 +47,7 @@ public class DataSourceFactory { private static final String DERBY_INIT_SQL_SCRIPT = "derby/ams-derby-init.sql"; private static final String MYSQL_INIT_SQL_SCRIPT = "mysql/ams-mysql-init.sql"; private static final String POSTGRES_INIT_SQL_SCRIPT = "postgres/ams-postgres-init.sql"; + private static final String DAMENG_INIT_SQL_SCRIPT = "dameng/ams-dameng-init.sql"; public static DataSource createDataSource(Configurations config) { BasicDataSource dataSource = new BasicDataSource(); @@ -54,7 +55,8 @@ public static DataSource createDataSource(Configurations config) { dataSource.setDriverClassName(config.getString(AmoroManagementConf.DB_DRIVER_CLASS_NAME)); String dbType = config.getString(AmoroManagementConf.DB_TYPE); if (AmoroManagementConf.DB_TYPE_MYSQL.equals(dbType) - || AmoroManagementConf.DB_TYPE_POSTGRES.equals(dbType)) { + || AmoroManagementConf.DB_TYPE_POSTGRES.equals(dbType) + || AmoroManagementConf.DB_TYPE_DAMENG.equals(dbType)) { dataSource.setUsername(config.getString(AmoroManagementConf.DB_USER_NAME)); dataSource.setPassword(config.getString(AmoroManagementConf.DB_PASSWORD)); } @@ -104,6 +106,9 @@ private static void createTablesIfNeed(DataSource ds, Configurations config) { String.format( "SELECT 1 FROM information_schema.tables WHERE table_schema = %s AND table_name = '%s'", "current_schema()", "catalog_metadata"); + } else if (AmoroManagementConf.DB_TYPE_DAMENG.equals(dbTypeConfig)) { + query = + String.format("SELECT 1 FROM user_tables WHERE table_name = '%s'", "catalog_metadata"); } LOG.info("Start check table creation, using query: {}", query); try (ResultSet rs = statement.executeQuery(query)) { @@ -131,6 +136,8 @@ private static URI getInitSqlScriptPath(String type) throws URISyntaxException { scriptPath = DERBY_INIT_SQL_SCRIPT; } else if (type.equals(AmoroManagementConf.DB_TYPE_POSTGRES)) { scriptPath = POSTGRES_INIT_SQL_SCRIPT; + } else if (type.equals(AmoroManagementConf.DB_TYPE_DAMENG)) { + scriptPath = DAMENG_INIT_SQL_SCRIPT; } URL scriptUrl = ClassLoader.getSystemResource(scriptPath); if (scriptUrl == null) { diff --git a/amoro-ams/src/main/java/org/apache/amoro/server/persistence/SqlSessionFactoryProvider.java b/amoro-ams/src/main/java/org/apache/amoro/server/persistence/SqlSessionFactoryProvider.java index 49eb9f5db5..39834d30c4 100644 --- a/amoro-ams/src/main/java/org/apache/amoro/server/persistence/SqlSessionFactoryProvider.java +++ b/amoro-ams/src/main/java/org/apache/amoro/server/persistence/SqlSessionFactoryProvider.java @@ -86,6 +86,7 @@ public void init(DataSource dataSource) throws SQLException { properties.setProperty("MySQL", "mysql"); properties.setProperty("PostgreSQL", "postgres"); properties.setProperty("Derby", "derby"); + properties.setProperty("DM DBMS", "dameng"); provider.setProperties(properties); configuration.setDatabaseId(provider.getDatabaseId(dataSource)); if (sqlSessionFactory == null) { @@ -101,6 +102,7 @@ private void registerDialectAliases() { registerDialectAlias("postgres", PostgreSqlDialect.class); registerDialectAlias("mysql", MySqlDialect.class); registerDialectAlias("derby", SqlServer2012Dialect.class); + registerDialectAlias("dameng", MySqlDialect.class); } public SqlSessionFactory get() { diff --git a/amoro-ams/src/main/java/org/apache/amoro/server/persistence/mapper/TableRuntimeMapper.java b/amoro-ams/src/main/java/org/apache/amoro/server/persistence/mapper/TableRuntimeMapper.java index 3cfb69f2e9..660a840040 100644 --- a/amoro-ams/src/main/java/org/apache/amoro/server/persistence/mapper/TableRuntimeMapper.java +++ b/amoro-ams/src/main/java/org/apache/amoro/server/persistence/mapper/TableRuntimeMapper.java @@ -107,6 +107,7 @@ public interface TableRuntimeMapper { + "" + "" + "" + + "" + "SELECT r.table_id, group_name, status_code, status_code_update_time, table_config, table_summary, bucket_id FROM " + TABLE_NAME + " r JOIN table_identifier i " diff --git a/amoro-ams/src/test/java/org/apache/amoro/server/TestAmoroManagementConfValidator.java b/amoro-ams/src/test/java/org/apache/amoro/server/TestAmoroManagementConfValidator.java index 8e52f779b8..fc37865c1d 100644 --- a/amoro-ams/src/test/java/org/apache/amoro/server/TestAmoroManagementConfValidator.java +++ b/amoro-ams/src/test/java/org/apache/amoro/server/TestAmoroManagementConfValidator.java @@ -46,7 +46,7 @@ public void testValidateServerExposeHost() { } public static Stream testValidateDBConfig() { - return Stream.of(Arguments.of("mysql"), Arguments.of("postgres")); + return Stream.of(Arguments.of("mysql"), Arguments.of("postgres"), Arguments.of("dameng")); } @ParameterizedTest diff --git a/charts/amoro/templates/amoro-deployment.yaml b/charts/amoro/templates/amoro-deployment.yaml index 05d84d2e84..c26d206878 100644 --- a/charts/amoro/templates/amoro-deployment.yaml +++ b/charts/amoro/templates/amoro-deployment.yaml @@ -50,7 +50,7 @@ spec: {{/* TODO If Support Replica can be use more than 1 */}} imagePullPolicy: {{ .Values.image.pullPolicy }} command: [ "/entrypoint.sh", "ams" ] env: - {{- if or (eq .Values.amoroConf.database.type "mysql") (eq .Values.amoroConf.database.type "postgres") }} + {{- if or (eq .Values.amoroConf.database.type "mysql") (eq .Values.amoroConf.database.type "postgres") (eq .Values.amoroConf.database.type "dameng") }} - name: "AMS_DATABASE_USERNAME" valueFrom: secretKeyRef: diff --git a/charts/amoro/templates/amoro-secret.yaml b/charts/amoro/templates/amoro-secret.yaml index 3beff332b9..022003d012 100644 --- a/charts/amoro/templates/amoro-secret.yaml +++ b/charts/amoro/templates/amoro-secret.yaml @@ -27,7 +27,7 @@ data: AdminUsername: {{ .Values.amoroConf.ams.adminUsername | b64enc | quote }} AdminPassword: {{ .Values.amoroConf.ams.adminPassword | b64enc | quote }} - {{- if or (eq .Values.amoroConf.database.type "mysql") (eq .Values.amoroConf.database.type "postgres") }} + {{- if or (eq .Values.amoroConf.database.type "mysql") (eq .Values.amoroConf.database.type "postgres") (eq .Values.amoroConf.database.type "dameng") }} # use helm set database username and password DatabaseUsername: {{ .Values.amoroConf.database.username | b64enc | quote }} DatabasePassword: {{ .Values.amoroConf.database.password | b64enc | quote }} diff --git a/dist/src/main/assemblies/bin.xml b/dist/src/main/assemblies/bin.xml index e239365127..76156a229b 100644 --- a/dist/src/main/assemblies/bin.xml +++ b/dist/src/main/assemblies/bin.xml @@ -113,6 +113,11 @@ conf/derby 0644 + + ../amoro-ams/src/main/resources/dameng + conf/dameng + 0644 + ../amoro-ams/target/amoro-ams-dependency/lib lib/ diff --git a/dist/src/main/assemblies/release-bin.xml b/dist/src/main/assemblies/release-bin.xml index 23d8ba12d0..72d0cd0316 100644 --- a/dist/src/main/assemblies/release-bin.xml +++ b/dist/src/main/assemblies/release-bin.xml @@ -89,6 +89,11 @@ conf/derby 0644 + + ../amoro-ams/src/main/resources/dameng + conf/dameng + 0644 + ../amoro-ams/target/amoro-ams-dependency/lib lib/ diff --git a/docker/amoro/Dockerfile b/docker/amoro/Dockerfile index 8315411c74..c230836ab3 100644 --- a/docker/amoro/Dockerfile +++ b/docker/amoro/Dockerfile @@ -58,6 +58,9 @@ WORKDIR ${AMORO_HOME} RUN cd ${AMORO_HOME}/lib \ && wget ${MAVEN_MIRROR}/mysql/mysql-connector-java/8.0.30/mysql-connector-java-8.0.30.jar +RUN cd ${AMORO_HOME}/lib \ + && wget ${MAVEN_MIRROR}/com/dameng/DmJdbcDriver18/8.1.2.141/DmJdbcDriver18-8.1.2.141.jar + ENTRYPOINT ["/entrypoint.sh"] CMD ["help"] diff --git a/pom.xml b/pom.xml index 41c26c4d9f..d8d5ed207d 100644 --- a/pom.xml +++ b/pom.xml @@ -138,6 +138,7 @@ 2.2 3.5.15 42.7.2 + 8.1.2.141 10.14.2.0 2.9.0 4.1.128.Final @@ -787,6 +788,12 @@ ${mysql-jdbc.version} + + com.dameng + DmJdbcDriver18 + ${dameng-jdbc.version} + + org.apache.commons commons-dbcp2