kyoty opened a new pull request #5611:
URL: https://github.com/apache/dolphinscheduler/pull/5611


   ## Purpose of the pull request
   The PRs associated with 
[issue-4417](https://github.com/apache/dolphinscheduler/issues/4417)  
introduced a large number of database schema changes, but these new features 
were not represented in the corresponding SQL files in the Dev branch, 
resulting in some runtime exceptions  in the dev code environment,  such as 
following:
   ```java
   rg.springframework.jdbc.BadSqlGrammarException: 
   ### Error querying database.  Cause: 
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 
'task_code' in 'field list'
   ### The error may exist in file 
[E:\workspaces\dolphinscheduler\dolphinscheduler-dao\target\classes\org\apache\dolphinscheduler\dao\mapper\TaskInstanceMapper.xml]
   ### The error may involve defaultParameterMap
   ### The error occurred while setting parameters
   ### SQL: select                   id, name, task_type, process_instance_id, 
task_code, task_definition_version, state, submit_time,         start_time, 
end_time, host, execute_path, log_path, alert_flag, retry_times, pid, app_link, 
        flag, retry_interval, max_retry_times, task_instance_priority, 
worker_group, executor_id,         first_submit_time, delay_time, task_params, 
var_pool               from t_ds_task_instance         where 1 = 1              
                   and state in              (                   ?              
,                  ?              ,                  ?              ,           
       ?              ,                  ?              )
   ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 
Unknown column 'task_code' in 'field list'
   ; bad SQL grammar []; nested exception is 
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 
'task_code' in 'field list'
        at 
org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)
 ~[spring-jdbc-5.1.19.RELEASE.jar:5.1.19.RELEASE]
        at 
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
 ~[spring-jdbc-5.1.19.RELEASE.jar:5.1.19.RELEASE]
        at 
org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:74)
 ~[mybatis-spring-2.0.2.jar:2.0.2]
        at 
org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)
 ~[mybatis-spring-2.0.2.jar:2.0.2]
        at com.sun.proxy.$Proxy43.selectList(Unknown Source) ~[na:na]
        at 
org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:223) 
~[mybatis-spring-2.0.2.jar:2.0.2]
        at 
com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:158)
 ~[mybatis-plus-core-3.2.0.jar:3.2.0]
        at 
com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:76)
 ~[mybatis-plus-core-3.2.0.jar:3.2.0]
        at 
com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:61)
 ~[mybatis-plus-core-3.2.0.jar:3.2.0]
        at com.sun.proxy.$Proxy50.queryByHostAndStatus(Unknown Source) ~[na:na]
        at 
org.apache.dolphinscheduler.service.process.ProcessService.queryNeedFailoverTaskInstances(ProcessService.java:1729)
 ~[classes/:na]
        at 
org.apache.dolphinscheduler.service.process.ProcessService$$FastClassBySpringCGLIB$$ed138739.invoke(<generated>)
 ~[classes/:na]
        at 
org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) 
~[spring-core-5.1.19.RELEASE.jar:5.1.19.RELEASE]
        at 
org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:687)
 ~[spring-aop-5.1.19.RELEASE.jar:5.1.19.RELEASE]
        at 
org.apache.dolphinscheduler.service.process.ProcessService$$EnhancerBySpringCGLIB$$7b366cc2.queryNeedFailoverTaskInstances(<generated>)
 ~[classes/:na]
        at 
org.apache.dolphinscheduler.server.master.zk.ZKMasterClient.failoverWorker(ZKMasterClient.java:311)
 ~[classes/:na]
        at 
org.apache.dolphinscheduler.server.master.zk.ZKMasterClient.failoverServerWhenDown(ZKMasterClient.java:187)
 ~[classes/:na]
        at 
org.apache.dolphinscheduler.server.master.zk.ZKMasterClient.removeZKNodePath(ZKMasterClient.java:165)
 ~[classes/:na]
        at 
org.apache.dolphinscheduler.server.master.zk.ZKMasterClient.start(ZKMasterClient.java:99)
 ~[classes/:na]
        at 
org.apache.dolphinscheduler.server.master.MasterServer.run(MasterServer.java:122)
 ~[classes/:na]
        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
~[na:na]
        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 ~[na:na]
        at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
        at 
org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:363)
 ~[spring-beans-5.1.19.RELEASE.jar:5.1.19.RELEASE]
        at 
org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:307)
 ~[spring-beans-5.1.19.RELEASE.jar:5.1.19.RELEASE]
        at 
org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136)
 ~[spring-beans-5.1.19.RELEASE.jar:5.1.19.RELEASE]
        at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:413)
 ~[spring-beans-5.1.19.RELEASE.jar:5.1.19.RELEASE]
        at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1761)
 ~[spring-beans-5.1.19.RELEASE.jar:5.1.19.RELEASE]
        at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:592)
 ~[spring-beans-5.1.19.RELEASE.jar:5.1.19.RELEASE]
        at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:514)
 ~[spring-beans-5.1.19.RELEASE.jar:5.1.19.RELEASE]
        at 
org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:321)
 ~[spring-beans-5.1.19.RELEASE.jar:5.1.19.RELEASE]
        at 
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
 ~[spring-beans-5.1.19.RELEASE.jar:5.1.19.RELEASE]
        at 
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:319)
 ~[spring-beans-5.1.19.RELEASE.jar:5.1.19.RELEASE]
        at 
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
 ~[spring-beans-5.1.19.RELEASE.jar:5.1.19.RELEASE]
        at 
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:866)
 ~[spring-beans-5.1.19.RELEASE.jar:5.1.19.RELEASE]
        at 
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878)
 ~[spring-context-5.1.19.RELEASE.jar:5.1.19.RELEASE]
        at 
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
 ~[spring-context-5.1.19.RELEASE.jar:5.1.19.RELEASE]
        at 
org.springframework.boot.SpringApplication.refresh(SpringApplication.java:744) 
~[spring-boot-2.1.18.RELEASE.jar:2.1.18.RELEASE]
        at 
org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:391)
 ~[spring-boot-2.1.18.RELEASE.jar:2.1.18.RELEASE]
        at 
org.springframework.boot.SpringApplication.run(SpringApplication.java:312) 
~[spring-boot-2.1.18.RELEASE.jar:2.1.18.RELEASE]
        at 
org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:140)
 ~[spring-boot-2.1.18.RELEASE.jar:2.1.18.RELEASE]
        at 
org.apache.dolphinscheduler.server.master.MasterServer.main(MasterServer.java:104)
 ~[classes/:na]
   Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 
Unknown column 'task_code' in 'field list'
        at 
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native
 Method) ~[na:na]
        at 
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
 ~[na:na]
        at 
java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
 ~[na:na]
        at 
java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) 
~[na:na]
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:377) 
~[mysql-connector-java-5.1.34.jar:5.1.34]
        at com.mysql.jdbc.Util.getInstance(Util.java:360) 
~[mysql-connector-java-5.1.34.jar:5.1.34]
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:978) 
~[mysql-connector-java-5.1.34.jar:5.1.34]
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3887) 
~[mysql-connector-java-5.1.34.jar:5.1.34]
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3823) 
~[mysql-connector-java-5.1.34.jar:5.1.34]
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435) 
~[mysql-connector-java-5.1.34.jar:5.1.34]
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582) 
~[mysql-connector-java-5.1.34.jar:5.1.34]
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2530) 
~[mysql-connector-java-5.1.34.jar:5.1.34]
        at 
com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1907) 
~[mysql-connector-java-5.1.34.jar:5.1.34]
        at 
com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1199) 
~[mysql-connector-java-5.1.34.jar:5.1.34]
        at 
com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)
 ~[druid-1.1.22.jar:1.1.22]
        at 
org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)
 ~[mybatis-3.5.2.jar:3.5.2]
        at 
org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)
 ~[mybatis-3.5.2.jar:3.5.2]
        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
~[na:na]
        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 ~[na:na]
        at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
        at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63) 
~[mybatis-3.5.2.jar:3.5.2]
        at com.sun.proxy.$Proxy72.query(Unknown Source) ~[na:na]
        at 
com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doQuery(MybatisSimpleExecutor.java:67)
 ~[mybatis-plus-core-3.2.0.jar:3.2.0]
        at 
org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)
 ~[mybatis-3.5.2.jar:3.5.2]
        at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) 
~[mybatis-3.5.2.jar:3.5.2]
        at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:136) 
~[mybatis-3.5.2.jar:3.5.2]
        at 
org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)
 ~[mybatis-3.5.2.jar:3.5.2]
        at 
org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
 ~[mybatis-3.5.2.jar:3.5.2]
        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
~[na:na]
        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 ~[na:na]
        at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
        at 
org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)
 ~[mybatis-spring-2.0.2.jar:2.0.2]
        ... 39 common frames omitted
   
   ```
   
   ## Brief change log
   
   According to the `sql\dolphinscheduler_mysql.sql` and 
`sql\dolphinscheduler_postgre.sql`,  I tried to add the newly added tables and 
fields in the upgrade script.
   
   ## Verify this pull request
   1.  existing UTS
   2.  munual test works well, coverd mysql and postgresql
   
   **what's more , The database schema changes very frequently, and I think the 
related unit tests may not cover all aspects. When I have time, may be  I can 
explore whether there is a better way to detect the SQL problem, is anyone has 
good ideas ?**
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to