Browse Source

[Fix-5386][Alert] Fix ERROR: relation t_ds_plugin_define does not exist (#5387)

pull/3/MERGE
Shiwen Cheng 4 years ago committed by GitHub
parent
commit
0f3eed9d00
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 21
      dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/AlertServer.java
  2. 7
      dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/AlertServerTest.java
  3. 9
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/PluginDao.java
  4. 7
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/PluginDefineMapper.java
  5. 4
      dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/PluginDefineMapper.xml

21
dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/AlertServer.java

@ -30,6 +30,7 @@ import org.apache.dolphinscheduler.common.thread.Stopper;
import org.apache.dolphinscheduler.common.utils.PropertyUtils; import org.apache.dolphinscheduler.common.utils.PropertyUtils;
import org.apache.dolphinscheduler.dao.AlertDao; import org.apache.dolphinscheduler.dao.AlertDao;
import org.apache.dolphinscheduler.dao.DaoFactory; import org.apache.dolphinscheduler.dao.DaoFactory;
import org.apache.dolphinscheduler.dao.PluginDao;
import org.apache.dolphinscheduler.dao.entity.Alert; import org.apache.dolphinscheduler.dao.entity.Alert;
import org.apache.dolphinscheduler.remote.NettyRemotingServer; import org.apache.dolphinscheduler.remote.NettyRemotingServer;
import org.apache.dolphinscheduler.remote.command.CommandType; import org.apache.dolphinscheduler.remote.command.CommandType;
@ -47,7 +48,14 @@ import com.google.common.collect.ImmutableList;
* alert of start * alert of start
*/ */
public class AlertServer { public class AlertServer {
private static final Logger logger = LoggerFactory.getLogger(AlertServer.class); private static final Logger logger = LoggerFactory.getLogger(AlertServer.class);
/**
* Plugin Dao
*/
private PluginDao pluginDao = DaoFactory.getDaoInstance(PluginDao.class);
/** /**
* Alert Dao * Alert Dao
*/ */
@ -55,8 +63,6 @@ public class AlertServer {
private AlertSender alertSender; private AlertSender alertSender;
private static AlertServer instance;
private AlertPluginManager alertPluginManager; private AlertPluginManager alertPluginManager;
private DolphinPluginManagerConfig alertPluginManagerConfig; private DolphinPluginManagerConfig alertPluginManagerConfig;
@ -78,13 +84,19 @@ public class AlertServer {
public static final AlertServer getInstance() { public static final AlertServer getInstance() {
return AlertServerHolder.INSTANCE; return AlertServerHolder.INSTANCE;
} }
private AlertServer() { private AlertServer() {
} }
private void checkTable() {
if (!pluginDao.checkPluginDefineTableExist()) {
logger.error("Plugin Define Table t_ds_plugin_define Not Exist . Please Create it First !");
System.exit(1);
}
}
private void initPlugin() { private void initPlugin() {
alertPluginManager = new AlertPluginManager(); alertPluginManager = new AlertPluginManager();
alertPluginManagerConfig = new DolphinPluginManagerConfig(); alertPluginManagerConfig = new DolphinPluginManagerConfig();
@ -101,7 +113,7 @@ public class AlertServer {
try { try {
alertPluginLoader.loadPlugins(); alertPluginLoader.loadPlugins();
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException("load Alert Plugin Failed !", e); throw new RuntimeException("Load Alert Plugin Failed !", e);
} }
} }
@ -142,6 +154,7 @@ public class AlertServer {
*/ */
public void start() { public void start() {
PropertyUtils.loadPropertyFile(ALERT_PROPERTIES_PATH); PropertyUtils.loadPropertyFile(ALERT_PROPERTIES_PATH);
checkTable();
initPlugin(); initPlugin();
initRemoteServer(); initRemoteServer();
logger.info("alert server ready start "); logger.info("alert server ready start ");

7
dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/AlertServerTest.java

@ -56,6 +56,7 @@ public class AlertServerTest {
PluginDao pluginDao = PowerMockito.mock(PluginDao.class); PluginDao pluginDao = PowerMockito.mock(PluginDao.class);
PowerMockito.when(DaoFactory.getDaoInstance(PluginDao.class)).thenReturn(pluginDao); PowerMockito.when(DaoFactory.getDaoInstance(PluginDao.class)).thenReturn(pluginDao);
PowerMockito.when(pluginDao.checkPluginDefineTableExist()).thenReturn(true);
AlertChannel alertChannelMock = PowerMockito.mock(AlertChannel.class); AlertChannel alertChannelMock = PowerMockito.mock(AlertChannel.class);
@ -80,15 +81,11 @@ public class AlertServerTest {
AlertServer alertServer = AlertServer.getInstance(); AlertServer alertServer = AlertServer.getInstance();
Assert.assertNotNull(alertServer); Assert.assertNotNull(alertServer);
new Thread(() -> { new Thread(() -> alertServer.start()).start();
alertServer.start();
})
.start();
Thread.sleep(5 * Constants.ALERT_SCAN_INTERVAL); Thread.sleep(5 * Constants.ALERT_SCAN_INTERVAL);
alertServer.stop(); alertServer.stop();
} }
} }

9
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/PluginDao.java

@ -44,6 +44,15 @@ public class PluginDao extends AbstractBaseDao {
pluginDefineMapper = ConnectionFactory.getInstance().getMapper(PluginDefineMapper.class); pluginDefineMapper = ConnectionFactory.getInstance().getMapper(PluginDefineMapper.class);
} }
/**
* check plugin define table exist
*
* @return boolean
*/
public boolean checkPluginDefineTableExist() {
return pluginDefineMapper.checkTableExist() > 0;
}
/** /**
* add pluginDefine * add pluginDefine
* *

7
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/PluginDefineMapper.java

@ -27,6 +27,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface PluginDefineMapper extends BaseMapper<PluginDefine> { public interface PluginDefineMapper extends BaseMapper<PluginDefine> {
/**
* check table exist
*
* @return boolean
*/
int checkTableExist();
/** /**
* query all plugin define * query all plugin define
* *

4
dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/PluginDefineMapper.xml

@ -18,6 +18,10 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="org.apache.dolphinscheduler.dao.mapper.PluginDefineMapper"> <mapper namespace="org.apache.dolphinscheduler.dao.mapper.PluginDefineMapper">
<select id="checkTableExist" resultType="int">
select count(*) from information_schema.TABLES where table_name = 't_ds_plugin_define'
</select>
<select id="queryAllPluginDefineList" resultType="org.apache.dolphinscheduler.dao.entity.PluginDefine"> <select id="queryAllPluginDefineList" resultType="org.apache.dolphinscheduler.dao.entity.PluginDefine">
select * select *
from t_ds_plugin_define from t_ds_plugin_define

Loading…
Cancel
Save