Просмотр исходного кода

[Improvement-#7529][tools] Init DB schema from the full sql file. (#7530)

lgcareer 3 лет назад
Родитель
Сommit
cdd4e7bf03

dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgre.sql → dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql


+ 7 - 4
dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/CreateDolphinScheduler.java

@@ -42,10 +42,13 @@ public class CreateDolphinScheduler {
 
         @Override
         public void run(String... args) throws Exception {
-            dolphinSchedulerManager.initDolphinScheduler();
-            logger.info("init DolphinScheduler finished");
-            dolphinSchedulerManager.upgradeDolphinScheduler();
-            logger.info("upgrade DolphinScheduler finished");
+            if (dolphinSchedulerManager.schemaIsInitialized()) {
+                dolphinSchedulerManager.upgradeDolphinScheduler();
+                logger.info("upgrade DolphinScheduler finished");
+            } else {
+                dolphinSchedulerManager.initDolphinScheduler();
+                logger.info("init DolphinScheduler finished");
+            }
             logger.info("create DolphinScheduler success");
         }
     }

+ 10 - 3
dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/DolphinSchedulerManager.java

@@ -55,21 +55,28 @@ public class DolphinSchedulerManager {
     }
 
     public void initDolphinScheduler() {
+        this.initDolphinSchedulerSchema();
+    }
+
+    /**
+     * whether schema is initialized
+     * @return true if schema is initialized
+     */
+    public boolean schemaIsInitialized() {
         // Determines whether the dolphinscheduler table structure has been init
         if (upgradeDao.isExistsTable("t_escheduler_version")
             || upgradeDao.isExistsTable("t_ds_version")
             || upgradeDao.isExistsTable("t_escheduler_queue")) {
             logger.info("The database has been initialized. Skip the initialization step");
-            return;
+            return true;
         }
-        this.initDolphinSchedulerSchema();
+        return false;
     }
 
     public void initDolphinSchedulerSchema() {
         logger.info("Start initializing the DolphinScheduler manager table structure");
         upgradeDao.initSchema();
     }
-
     public void upgradeDolphinScheduler() throws IOException {
         // Gets a list of all upgrades
         List<String> schemaList = SchemaUtils.getAllSchemaList();

+ 9 - 44
dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/UpgradeDao.java

@@ -89,52 +89,17 @@ public abstract class UpgradeDao {
     public abstract DbType getDbType();
 
     public void initSchema() {
-        // Execute the dolphinscheduler DDL, it cannot be rolled back
-        runInitDDL();
-
-        // Execute the dolphinscheduler DML, it can be rolled back
-        runInitDML();
+        // Execute the dolphinscheduler full sql
+        runInitSql(getDbType());
     }
 
-    private void runInitDML() {
-        Resource mysqlSQLFilePath = new ClassPathResource("sql/" + initSqlPath() + "/dolphinscheduler_dml.sql");
-        Connection conn = null;
-        try {
-            conn = dataSource.getConnection();
-            conn.setAutoCommit(false);
-
-            // Execute the dolphinscheduler_dml.sql script to import related data of dolphinscheduler
-            ScriptRunner initScriptRunner = new ScriptRunner(conn, false, true);
-            Reader initSqlReader = new InputStreamReader(mysqlSQLFilePath.getInputStream());
-            initScriptRunner.runScript(initSqlReader);
-
-            conn.commit();
-        } catch (IOException e) {
-            try {
-                conn.rollback();
-            } catch (SQLException e1) {
-                logger.error(e1.getMessage(), e1);
-            }
-            logger.error(e.getMessage(), e);
-            throw new RuntimeException(e.getMessage(), e);
-        } catch (Exception e) {
-            try {
-                if (null != conn) {
-                    conn.rollback();
-                }
-            } catch (SQLException e1) {
-                logger.error(e1.getMessage(), e1);
-            }
-            logger.error(e.getMessage(), e);
-            throw new RuntimeException(e.getMessage(), e);
-        } finally {
-            ConnectionUtils.releaseResource(conn);
-        }
-
-    }
-
-    private void runInitDDL() {
-        Resource mysqlSQLFilePath = new ClassPathResource("sql/" + initSqlPath() + "/dolphinscheduler_ddl.sql");
+    /**
+     * run init sql to init db schema
+     * @param dbType db type
+     */
+    private void runInitSql(DbType dbType) {
+        String sqlFile = String.format("dolphinscheduler_%s.sql",dbType.getDescp());
+        Resource mysqlSQLFilePath = new ClassPathResource("sql/" + sqlFile);
         try (Connection conn = dataSource.getConnection()) {
             // Execute the dolphinscheduler_ddl.sql script to create the table structure of dolphinscheduler
             ScriptRunner initScriptRunner = new ScriptRunner(conn, true, true);