Browse Source

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

3.0.0/version-upgrade
lgcareer 3 years ago committed by GitHub
parent
commit
cdd4e7bf03
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 0
      dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql
  2. 11
      dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/CreateDolphinScheduler.java
  3. 13
      dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/DolphinSchedulerManager.java
  4. 53
      dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/UpgradeDao.java

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

11
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");
}
}

13
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();

53
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);

Loading…
Cancel
Save