[DSIP-28] Donnot scan whole bean under classpath (#15874)
This commit is contained in:
parent
a9decc911f
commit
285c5a8eb5
|
|
@ -23,11 +23,13 @@ import org.apache.dolphinscheduler.alert.registry.AlertRegistryClient;
|
||||||
import org.apache.dolphinscheduler.alert.rpc.AlertRpcServer;
|
import org.apache.dolphinscheduler.alert.rpc.AlertRpcServer;
|
||||||
import org.apache.dolphinscheduler.alert.service.AlertBootstrapService;
|
import org.apache.dolphinscheduler.alert.service.AlertBootstrapService;
|
||||||
import org.apache.dolphinscheduler.alert.service.ListenerEventPostService;
|
import org.apache.dolphinscheduler.alert.service.ListenerEventPostService;
|
||||||
|
import org.apache.dolphinscheduler.common.CommonConfiguration;
|
||||||
import org.apache.dolphinscheduler.common.constants.Constants;
|
import org.apache.dolphinscheduler.common.constants.Constants;
|
||||||
import org.apache.dolphinscheduler.common.lifecycle.ServerLifeCycleManager;
|
import org.apache.dolphinscheduler.common.lifecycle.ServerLifeCycleManager;
|
||||||
import org.apache.dolphinscheduler.common.thread.DefaultUncaughtExceptionHandler;
|
import org.apache.dolphinscheduler.common.thread.DefaultUncaughtExceptionHandler;
|
||||||
import org.apache.dolphinscheduler.common.thread.ThreadUtils;
|
import org.apache.dolphinscheduler.common.thread.ThreadUtils;
|
||||||
import org.apache.dolphinscheduler.plugin.registry.jdbc.JdbcRegistryAutoConfiguration;
|
import org.apache.dolphinscheduler.dao.DaoConfiguration;
|
||||||
|
import org.apache.dolphinscheduler.registry.api.RegistryConfiguration;
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
import javax.annotation.PreDestroy;
|
import javax.annotation.PreDestroy;
|
||||||
|
|
@ -37,14 +39,13 @@ import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.context.annotation.ComponentScan;
|
import org.springframework.context.annotation.Import;
|
||||||
import org.springframework.context.annotation.FilterType;
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
@Import({CommonConfiguration.class,
|
||||||
|
DaoConfiguration.class,
|
||||||
|
RegistryConfiguration.class})
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
@ComponentScan(value = "org.apache.dolphinscheduler", excludeFilters = {
|
|
||||||
@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = JdbcRegistryAutoConfiguration.class)
|
|
||||||
})
|
|
||||||
public class AlertServer {
|
public class AlertServer {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|
|
||||||
|
|
@ -18,13 +18,17 @@
|
||||||
package org.apache.dolphinscheduler.api;
|
package org.apache.dolphinscheduler.api;
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.api.metrics.ApiServerMetrics;
|
import org.apache.dolphinscheduler.api.metrics.ApiServerMetrics;
|
||||||
|
import org.apache.dolphinscheduler.common.CommonConfiguration;
|
||||||
import org.apache.dolphinscheduler.common.enums.PluginType;
|
import org.apache.dolphinscheduler.common.enums.PluginType;
|
||||||
import org.apache.dolphinscheduler.common.thread.DefaultUncaughtExceptionHandler;
|
import org.apache.dolphinscheduler.common.thread.DefaultUncaughtExceptionHandler;
|
||||||
|
import org.apache.dolphinscheduler.dao.DaoConfiguration;
|
||||||
import org.apache.dolphinscheduler.dao.PluginDao;
|
import org.apache.dolphinscheduler.dao.PluginDao;
|
||||||
import org.apache.dolphinscheduler.dao.entity.PluginDefine;
|
import org.apache.dolphinscheduler.dao.entity.PluginDefine;
|
||||||
import org.apache.dolphinscheduler.plugin.registry.jdbc.JdbcRegistryAutoConfiguration;
|
import org.apache.dolphinscheduler.plugin.storage.api.StorageConfiguration;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.TaskChannelFactory;
|
import org.apache.dolphinscheduler.plugin.task.api.TaskChannelFactory;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager;
|
import org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager;
|
||||||
|
import org.apache.dolphinscheduler.registry.api.RegistryConfiguration;
|
||||||
|
import org.apache.dolphinscheduler.service.ServiceConfiguration;
|
||||||
import org.apache.dolphinscheduler.spi.params.PluginParamsTransfer;
|
import org.apache.dolphinscheduler.spi.params.PluginParamsTransfer;
|
||||||
import org.apache.dolphinscheduler.spi.params.base.PluginParams;
|
import org.apache.dolphinscheduler.spi.params.base.PluginParams;
|
||||||
|
|
||||||
|
|
@ -38,21 +42,19 @@ import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
||||||
import org.springframework.boot.web.servlet.ServletComponentScan;
|
import org.springframework.boot.web.servlet.ServletComponentScan;
|
||||||
import org.springframework.context.annotation.ComponentScan;
|
import org.springframework.context.annotation.Import;
|
||||||
import org.springframework.context.annotation.FilterType;
|
|
||||||
import org.springframework.context.event.EventListener;
|
import org.springframework.context.event.EventListener;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Import({DaoConfiguration.class,
|
||||||
|
CommonConfiguration.class,
|
||||||
|
ServiceConfiguration.class,
|
||||||
|
StorageConfiguration.class,
|
||||||
|
RegistryConfiguration.class})
|
||||||
@ServletComponentScan
|
@ServletComponentScan
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
@ComponentScan(value = "org.apache.dolphinscheduler", excludeFilters = {
|
|
||||||
@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = JdbcRegistryAutoConfiguration.class)
|
|
||||||
})
|
|
||||||
@Slf4j
|
|
||||||
public class ApiApplicationServer {
|
public class ApiApplicationServer {
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private TaskPluginManager taskPluginManager;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private PluginDao pluginDao;
|
private PluginDao pluginDao;
|
||||||
|
|
||||||
|
|
@ -66,8 +68,8 @@ public class ApiApplicationServer {
|
||||||
public void run(ApplicationReadyEvent readyEvent) {
|
public void run(ApplicationReadyEvent readyEvent) {
|
||||||
log.info("Received spring application context ready event will load taskPlugin and write to DB");
|
log.info("Received spring application context ready event will load taskPlugin and write to DB");
|
||||||
// install task plugin
|
// install task plugin
|
||||||
taskPluginManager.loadPlugin();
|
TaskPluginManager.loadPlugin();
|
||||||
for (Map.Entry<String, TaskChannelFactory> entry : taskPluginManager.getTaskChannelFactoryMap().entrySet()) {
|
for (Map.Entry<String, TaskChannelFactory> entry : TaskPluginManager.getTaskChannelFactoryMap().entrySet()) {
|
||||||
String taskPluginName = entry.getKey();
|
String taskPluginName = entry.getKey();
|
||||||
TaskChannelFactory taskChannelFactory = entry.getValue();
|
TaskChannelFactory taskChannelFactory = entry.getValue();
|
||||||
List<PluginParams> params = taskChannelFactory.getParams();
|
List<PluginParams> params = taskChannelFactory.getParams();
|
||||||
|
|
|
||||||
|
|
@ -25,10 +25,10 @@ import org.apache.dolphinscheduler.plugin.task.api.enums.TaskTimeoutStrategy;
|
||||||
|
|
||||||
import org.apache.commons.beanutils.BeanUtils;
|
import org.apache.commons.beanutils.BeanUtils;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.SneakyThrows;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
|
|
@ -107,7 +107,8 @@ public class TaskUpdateRequest {
|
||||||
* @param taskDefinition exists task definition object
|
* @param taskDefinition exists task definition object
|
||||||
* @return task definition
|
* @return task definition
|
||||||
*/
|
*/
|
||||||
public TaskDefinition mergeIntoTaskDefinition(TaskDefinition taskDefinition) throws InvocationTargetException, IllegalAccessException, InstantiationException, NoSuchMethodException {
|
@SneakyThrows
|
||||||
|
public TaskDefinition mergeIntoTaskDefinition(TaskDefinition taskDefinition) {
|
||||||
TaskDefinition taskDefinitionDeepCopy = (TaskDefinition) BeanUtils.cloneBean(taskDefinition);
|
TaskDefinition taskDefinitionDeepCopy = (TaskDefinition) BeanUtils.cloneBean(taskDefinition);
|
||||||
assert taskDefinitionDeepCopy != null;
|
assert taskDefinitionDeepCopy != null;
|
||||||
if (this.name != null) {
|
if (this.name != null) {
|
||||||
|
|
|
||||||
|
|
@ -238,9 +238,6 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro
|
||||||
@Autowired
|
@Autowired
|
||||||
private DataSourceMapper dataSourceMapper;
|
private DataSourceMapper dataSourceMapper;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private TaskPluginManager taskPluginManager;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private WorkFlowLineageService workFlowLineageService;
|
private WorkFlowLineageService workFlowLineageService;
|
||||||
|
|
||||||
|
|
@ -424,7 +421,7 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro
|
||||||
throw new ServiceException(Status.DATA_IS_NOT_VALID, taskDefinitionJson);
|
throw new ServiceException(Status.DATA_IS_NOT_VALID, taskDefinitionJson);
|
||||||
}
|
}
|
||||||
for (TaskDefinitionLog taskDefinitionLog : taskDefinitionLogs) {
|
for (TaskDefinitionLog taskDefinitionLog : taskDefinitionLogs) {
|
||||||
if (!taskPluginManager.checkTaskParameters(ParametersNode.builder()
|
if (!TaskPluginManager.checkTaskParameters(ParametersNode.builder()
|
||||||
.taskType(taskDefinitionLog.getTaskType())
|
.taskType(taskDefinitionLog.getTaskType())
|
||||||
.taskParams(taskDefinitionLog.getTaskParams())
|
.taskParams(taskDefinitionLog.getTaskParams())
|
||||||
.dependence(taskDefinitionLog.getDependence())
|
.dependence(taskDefinitionLog.getDependence())
|
||||||
|
|
@ -1618,7 +1615,7 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro
|
||||||
|
|
||||||
// check whether the process definition json is normal
|
// check whether the process definition json is normal
|
||||||
for (TaskNode taskNode : taskNodes) {
|
for (TaskNode taskNode : taskNodes) {
|
||||||
if (!taskPluginManager.checkTaskParameters(ParametersNode.builder()
|
if (!TaskPluginManager.checkTaskParameters(ParametersNode.builder()
|
||||||
.taskType(taskNode.getType())
|
.taskType(taskNode.getType())
|
||||||
.taskParams(taskNode.getTaskParams())
|
.taskParams(taskNode.getTaskParams())
|
||||||
.dependence(taskNode.getDependence())
|
.dependence(taskNode.getDependence())
|
||||||
|
|
|
||||||
|
|
@ -70,11 +70,9 @@ import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionMapper;
|
||||||
import org.apache.dolphinscheduler.dao.mapper.ProcessInstanceMapper;
|
import org.apache.dolphinscheduler.dao.mapper.ProcessInstanceMapper;
|
||||||
import org.apache.dolphinscheduler.dao.mapper.ProjectMapper;
|
import org.apache.dolphinscheduler.dao.mapper.ProjectMapper;
|
||||||
import org.apache.dolphinscheduler.dao.mapper.RelationSubWorkflowMapper;
|
import org.apache.dolphinscheduler.dao.mapper.RelationSubWorkflowMapper;
|
||||||
import org.apache.dolphinscheduler.dao.mapper.ScheduleMapper;
|
|
||||||
import org.apache.dolphinscheduler.dao.mapper.TaskDefinitionLogMapper;
|
import org.apache.dolphinscheduler.dao.mapper.TaskDefinitionLogMapper;
|
||||||
import org.apache.dolphinscheduler.dao.mapper.TaskDefinitionMapper;
|
import org.apache.dolphinscheduler.dao.mapper.TaskDefinitionMapper;
|
||||||
import org.apache.dolphinscheduler.dao.mapper.TaskInstanceMapper;
|
import org.apache.dolphinscheduler.dao.mapper.TaskInstanceMapper;
|
||||||
import org.apache.dolphinscheduler.dao.mapper.TenantMapper;
|
|
||||||
import org.apache.dolphinscheduler.dao.repository.ProcessInstanceDao;
|
import org.apache.dolphinscheduler.dao.repository.ProcessInstanceDao;
|
||||||
import org.apache.dolphinscheduler.dao.repository.ProcessInstanceMapDao;
|
import org.apache.dolphinscheduler.dao.repository.ProcessInstanceMapDao;
|
||||||
import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
|
import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
|
||||||
|
|
@ -177,18 +175,9 @@ public class ProcessInstanceServiceImpl extends BaseServiceImpl implements Proce
|
||||||
@Autowired
|
@Autowired
|
||||||
UsersService usersService;
|
UsersService usersService;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private TenantMapper tenantMapper;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
TaskDefinitionMapper taskDefinitionMapper;
|
TaskDefinitionMapper taskDefinitionMapper;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private TaskPluginManager taskPluginManager;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ScheduleMapper scheduleMapper;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private RelationSubWorkflowMapper relationSubWorkflowMapper;
|
private RelationSubWorkflowMapper relationSubWorkflowMapper;
|
||||||
|
|
||||||
|
|
@ -725,7 +714,7 @@ public class ProcessInstanceServiceImpl extends BaseServiceImpl implements Proce
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
for (TaskDefinitionLog taskDefinitionLog : taskDefinitionLogs) {
|
for (TaskDefinitionLog taskDefinitionLog : taskDefinitionLogs) {
|
||||||
if (!taskPluginManager.checkTaskParameters(ParametersNode.builder()
|
if (!TaskPluginManager.checkTaskParameters(ParametersNode.builder()
|
||||||
.taskType(taskDefinitionLog.getTaskType())
|
.taskType(taskDefinitionLog.getTaskType())
|
||||||
.taskParams(taskDefinitionLog.getTaskParams())
|
.taskParams(taskDefinitionLog.getTaskParams())
|
||||||
.dependence(taskDefinitionLog.getDependence())
|
.dependence(taskDefinitionLog.getDependence())
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,6 @@ import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.collections4.MapUtils;
|
import org.apache.commons.collections4.MapUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
@ -135,9 +134,6 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
|
||||||
@Autowired
|
@Autowired
|
||||||
private ProcessService processService;
|
private ProcessService processService;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private TaskPluginManager taskPluginManager;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ProcessDefinitionService processDefinitionService;
|
private ProcessDefinitionService processDefinitionService;
|
||||||
|
|
||||||
|
|
@ -147,8 +143,8 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
|
||||||
/**
|
/**
|
||||||
* create task definition
|
* create task definition
|
||||||
*
|
*
|
||||||
* @param loginUser login user
|
* @param loginUser login user
|
||||||
* @param projectCode project code
|
* @param projectCode project code
|
||||||
* @param taskDefinitionJson task definition json
|
* @param taskDefinitionJson task definition json
|
||||||
*/
|
*/
|
||||||
@Transactional
|
@Transactional
|
||||||
|
|
@ -171,7 +167,7 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
for (TaskDefinitionLog taskDefinitionLog : taskDefinitionLogs) {
|
for (TaskDefinitionLog taskDefinitionLog : taskDefinitionLogs) {
|
||||||
if (!taskPluginManager.checkTaskParameters(ParametersNode.builder()
|
if (!TaskPluginManager.checkTaskParameters(ParametersNode.builder()
|
||||||
.taskType(taskDefinitionLog.getTaskType())
|
.taskType(taskDefinitionLog.getTaskType())
|
||||||
.taskParams(taskDefinitionLog.getTaskParams())
|
.taskParams(taskDefinitionLog.getTaskParams())
|
||||||
.dependence(taskDefinitionLog.getDependence())
|
.dependence(taskDefinitionLog.getDependence())
|
||||||
|
|
@ -212,7 +208,7 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
|
||||||
Project project = projectMapper.queryByCode(taskDefinition.getProjectCode());
|
Project project = projectMapper.queryByCode(taskDefinition.getProjectCode());
|
||||||
projectService.checkProjectAndAuthThrowException(user, project, permissions);
|
projectService.checkProjectAndAuthThrowException(user, project, permissions);
|
||||||
|
|
||||||
if (!taskPluginManager.checkTaskParameters(ParametersNode.builder()
|
if (!TaskPluginManager.checkTaskParameters(ParametersNode.builder()
|
||||||
.taskType(taskDefinition.getTaskType())
|
.taskType(taskDefinition.getTaskType())
|
||||||
.taskParams(taskDefinition.getTaskParams())
|
.taskParams(taskDefinition.getTaskParams())
|
||||||
.dependence(taskDefinition.getDependence())
|
.dependence(taskDefinition.getDependence())
|
||||||
|
|
@ -242,7 +238,7 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
|
||||||
/**
|
/**
|
||||||
* Create resource task definition
|
* Create resource task definition
|
||||||
*
|
*
|
||||||
* @param loginUser login user
|
* @param loginUser login user
|
||||||
* @param taskCreateRequest task definition json
|
* @param taskCreateRequest task definition json
|
||||||
* @return new TaskDefinition have created
|
* @return new TaskDefinition have created
|
||||||
*/
|
*/
|
||||||
|
|
@ -286,11 +282,11 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
|
||||||
/**
|
/**
|
||||||
* create single task definition that binds the workflow
|
* create single task definition that binds the workflow
|
||||||
*
|
*
|
||||||
* @param loginUser login user
|
* @param loginUser login user
|
||||||
* @param projectCode project code
|
* @param projectCode project code
|
||||||
* @param processDefinitionCode process definition code
|
* @param processDefinitionCode process definition code
|
||||||
* @param taskDefinitionJsonObj task definition json object
|
* @param taskDefinitionJsonObj task definition json object
|
||||||
* @param upstreamCodes upstream task codes, sep comma
|
* @param upstreamCodes upstream task codes, sep comma
|
||||||
* @return create result code
|
* @return create result code
|
||||||
*/
|
*/
|
||||||
@Transactional
|
@Transactional
|
||||||
|
|
@ -325,7 +321,7 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
|
||||||
putMsg(result, Status.DATA_IS_NOT_VALID, taskDefinitionJsonObj);
|
putMsg(result, Status.DATA_IS_NOT_VALID, taskDefinitionJsonObj);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
if (!taskPluginManager.checkTaskParameters(ParametersNode.builder()
|
if (!TaskPluginManager.checkTaskParameters(ParametersNode.builder()
|
||||||
.taskType(taskDefinition.getTaskType())
|
.taskType(taskDefinition.getTaskType())
|
||||||
.taskParams(taskDefinition.getTaskParams())
|
.taskParams(taskDefinition.getTaskParams())
|
||||||
.dependence(taskDefinition.getDependence())
|
.dependence(taskDefinition.getDependence())
|
||||||
|
|
@ -412,10 +408,10 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
|
||||||
/**
|
/**
|
||||||
* query task definition
|
* query task definition
|
||||||
*
|
*
|
||||||
* @param loginUser login user
|
* @param loginUser login user
|
||||||
* @param projectCode project code
|
* @param projectCode project code
|
||||||
* @param processCode process code
|
* @param processCode process code
|
||||||
* @param taskName task name
|
* @param taskName task name
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Map<String, Object> queryTaskDefinitionByName(User loginUser, long projectCode, long processCode,
|
public Map<String, Object> queryTaskDefinitionByName(User loginUser, long projectCode, long processCode,
|
||||||
|
|
@ -473,12 +469,12 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete resource task definition by code
|
* Delete resource task definition by code
|
||||||
*
|
* <p>
|
||||||
* Only task release state offline and no downstream tasks can be deleted, will also remove the exists
|
* Only task release state offline and no downstream tasks can be deleted, will also remove the exists
|
||||||
* task relation [upstreamTaskCode, taskCode]
|
* task relation [upstreamTaskCode, taskCode]
|
||||||
*
|
*
|
||||||
* @param loginUser login user
|
* @param loginUser login user
|
||||||
* @param taskCode task code
|
* @param taskCode task code
|
||||||
*/
|
*/
|
||||||
@Transactional
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -546,9 +542,9 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
|
||||||
/**
|
/**
|
||||||
* update task definition
|
* update task definition
|
||||||
*
|
*
|
||||||
* @param loginUser login user
|
* @param loginUser login user
|
||||||
* @param projectCode project code
|
* @param projectCode project code
|
||||||
* @param taskCode task code
|
* @param taskCode task code
|
||||||
* @param taskDefinitionJsonObj task definition json object
|
* @param taskDefinitionJsonObj task definition json object
|
||||||
*/
|
*/
|
||||||
@Transactional
|
@Transactional
|
||||||
|
|
@ -604,8 +600,8 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
|
||||||
/**
|
/**
|
||||||
* update task definition
|
* update task definition
|
||||||
*
|
*
|
||||||
* @param loginUser login user
|
* @param loginUser login user
|
||||||
* @param taskCode task code
|
* @param taskCode task code
|
||||||
* @param taskUpdateRequest task definition json object
|
* @param taskUpdateRequest task definition json object
|
||||||
* @return new TaskDefinition have updated
|
* @return new TaskDefinition have updated
|
||||||
*/
|
*/
|
||||||
|
|
@ -619,13 +615,8 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
|
||||||
throw new ServiceException(Status.TASK_DEFINITION_NOT_EXISTS, taskCode);
|
throw new ServiceException(Status.TASK_DEFINITION_NOT_EXISTS, taskCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
TaskDefinition taskDefinitionUpdate;
|
TaskDefinition taskDefinitionUpdate = taskUpdateRequest.mergeIntoTaskDefinition(taskDefinitionOriginal);
|
||||||
try {
|
|
||||||
taskDefinitionUpdate = taskUpdateRequest.mergeIntoTaskDefinition(taskDefinitionOriginal);
|
|
||||||
} catch (InvocationTargetException | IllegalAccessException | InstantiationException
|
|
||||||
| NoSuchMethodException e) {
|
|
||||||
throw new ServiceException(Status.REQUEST_PARAMS_NOT_VALID_ERROR, taskUpdateRequest.toString());
|
|
||||||
}
|
|
||||||
this.checkTaskDefinitionValid(loginUser, taskDefinitionUpdate, TASK_DEFINITION_UPDATE);
|
this.checkTaskDefinitionValid(loginUser, taskDefinitionUpdate, TASK_DEFINITION_UPDATE);
|
||||||
this.TaskDefinitionUpdateValid(taskDefinitionOriginal, taskDefinitionUpdate);
|
this.TaskDefinitionUpdateValid(taskDefinitionOriginal, taskDefinitionUpdate);
|
||||||
|
|
||||||
|
|
@ -656,7 +647,7 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
|
||||||
* Get resource task definition by code
|
* Get resource task definition by code
|
||||||
*
|
*
|
||||||
* @param loginUser login user
|
* @param loginUser login user
|
||||||
* @param taskCode task code
|
* @param taskCode task code
|
||||||
* @return TaskDefinition
|
* @return TaskDefinition
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -674,7 +665,7 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
|
||||||
/**
|
/**
|
||||||
* Get resource task definition according to query parameter
|
* Get resource task definition according to query parameter
|
||||||
*
|
*
|
||||||
* @param loginUser login user
|
* @param loginUser login user
|
||||||
* @param taskFilterRequest taskFilterRequest object you want to filter the resource task definitions
|
* @param taskFilterRequest taskFilterRequest object you want to filter the resource task definitions
|
||||||
* @return TaskDefinitions of page
|
* @return TaskDefinitions of page
|
||||||
*/
|
*/
|
||||||
|
|
@ -741,7 +732,7 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
|
||||||
putMsg(result, Status.DATA_IS_NOT_VALID, taskDefinitionJsonObj);
|
putMsg(result, Status.DATA_IS_NOT_VALID, taskDefinitionJsonObj);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (!taskPluginManager.checkTaskParameters(ParametersNode.builder()
|
if (!TaskPluginManager.checkTaskParameters(ParametersNode.builder()
|
||||||
.taskType(taskDefinitionToUpdate.getTaskType())
|
.taskType(taskDefinitionToUpdate.getTaskType())
|
||||||
.taskParams(taskDefinitionToUpdate.getTaskParams())
|
.taskParams(taskDefinitionToUpdate.getTaskParams())
|
||||||
.dependence(taskDefinitionToUpdate.getDependence())
|
.dependence(taskDefinitionToUpdate.getDependence())
|
||||||
|
|
@ -846,11 +837,11 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
|
||||||
/**
|
/**
|
||||||
* update task definition and upstream
|
* update task definition and upstream
|
||||||
*
|
*
|
||||||
* @param loginUser login user
|
* @param loginUser login user
|
||||||
* @param projectCode project code
|
* @param projectCode project code
|
||||||
* @param taskCode task definition code
|
* @param taskCode task definition code
|
||||||
* @param taskDefinitionJsonObj task definition json object
|
* @param taskDefinitionJsonObj task definition json object
|
||||||
* @param upstreamCodes upstream task codes, sep comma
|
* @param upstreamCodes upstream task codes, sep comma
|
||||||
* @return update result code
|
* @return update result code
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -1019,10 +1010,10 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
|
||||||
/**
|
/**
|
||||||
* switch task definition
|
* switch task definition
|
||||||
*
|
*
|
||||||
* @param loginUser login user
|
* @param loginUser login user
|
||||||
* @param projectCode project code
|
* @param projectCode project code
|
||||||
* @param taskCode task code
|
* @param taskCode task code
|
||||||
* @param version the version user want to switch
|
* @param version the version user want to switch
|
||||||
*/
|
*/
|
||||||
@Transactional
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -1277,9 +1268,9 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
|
||||||
/**
|
/**
|
||||||
* release task definition
|
* release task definition
|
||||||
*
|
*
|
||||||
* @param loginUser login user
|
* @param loginUser login user
|
||||||
* @param projectCode project code
|
* @param projectCode project code
|
||||||
* @param code task definition code
|
* @param code task definition code
|
||||||
* @param releaseState releaseState
|
* @param releaseState releaseState
|
||||||
* @return update result code
|
* @return update result code
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -84,6 +84,7 @@ import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
import org.mockito.InjectMocks;
|
import org.mockito.InjectMocks;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.MockedStatic;
|
||||||
import org.mockito.Mockito;
|
import org.mockito.Mockito;
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
import org.mockito.junit.jupiter.MockitoSettings;
|
import org.mockito.junit.jupiter.MockitoSettings;
|
||||||
|
|
@ -142,9 +143,6 @@ public class ProcessInstanceServiceTest {
|
||||||
@Mock
|
@Mock
|
||||||
TaskDefinitionMapper taskDefinitionMapper;
|
TaskDefinitionMapper taskDefinitionMapper;
|
||||||
|
|
||||||
@Mock
|
|
||||||
TaskPluginManager taskPluginManager;
|
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
ScheduleMapper scheduleMapper;
|
ScheduleMapper scheduleMapper;
|
||||||
|
|
||||||
|
|
@ -625,21 +623,27 @@ public class ProcessInstanceServiceTest {
|
||||||
List<TaskDefinitionLog> taskDefinitionLogs = JSONUtils.toList(taskDefinitionJson, TaskDefinitionLog.class);
|
List<TaskDefinitionLog> taskDefinitionLogs = JSONUtils.toList(taskDefinitionJson, TaskDefinitionLog.class);
|
||||||
when(processDefinitionService.checkProcessNodeList(taskRelationJson, taskDefinitionLogs)).thenReturn(result);
|
when(processDefinitionService.checkProcessNodeList(taskRelationJson, taskDefinitionLogs)).thenReturn(result);
|
||||||
putMsg(result, Status.SUCCESS, projectCode);
|
putMsg(result, Status.SUCCESS, projectCode);
|
||||||
when(taskPluginManager.checkTaskParameters(Mockito.any())).thenReturn(true);
|
|
||||||
Map<String, Object> processInstanceFinishRes =
|
|
||||||
processInstanceService.updateProcessInstance(loginUser, projectCode, 1,
|
|
||||||
taskRelationJson, taskDefinitionJson, "2020-02-21 00:00:00", true, "", "", 0);
|
|
||||||
Assertions.assertEquals(Status.SUCCESS, processInstanceFinishRes.get(Constants.STATUS));
|
|
||||||
|
|
||||||
// success
|
try (
|
||||||
when(processDefineMapper.queryByCode(46L)).thenReturn(processDefinition);
|
MockedStatic<TaskPluginManager> taskPluginManagerMockedStatic =
|
||||||
putMsg(result, Status.SUCCESS, projectCode);
|
Mockito.mockStatic(TaskPluginManager.class)) {
|
||||||
|
taskPluginManagerMockedStatic.when(() -> TaskPluginManager.checkTaskParameters(Mockito.any()))
|
||||||
|
.thenReturn(true);
|
||||||
|
Map<String, Object> processInstanceFinishRes =
|
||||||
|
processInstanceService.updateProcessInstance(loginUser, projectCode, 1,
|
||||||
|
taskRelationJson, taskDefinitionJson, "2020-02-21 00:00:00", true, "", "", 0);
|
||||||
|
Assertions.assertEquals(Status.SUCCESS, processInstanceFinishRes.get(Constants.STATUS));
|
||||||
|
|
||||||
when(processService.saveProcessDefine(loginUser, processDefinition, Boolean.FALSE, Boolean.FALSE))
|
// success
|
||||||
.thenReturn(1);
|
when(processDefineMapper.queryByCode(46L)).thenReturn(processDefinition);
|
||||||
Map<String, Object> successRes = processInstanceService.updateProcessInstance(loginUser, projectCode, 1,
|
putMsg(result, Status.SUCCESS, projectCode);
|
||||||
taskRelationJson, taskDefinitionJson, "2020-02-21 00:00:00", Boolean.FALSE, "", "", 0);
|
|
||||||
Assertions.assertEquals(Status.SUCCESS, successRes.get(Constants.STATUS));
|
when(processService.saveProcessDefine(loginUser, processDefinition, Boolean.FALSE, Boolean.FALSE))
|
||||||
|
.thenReturn(1);
|
||||||
|
Map<String, Object> successRes = processInstanceService.updateProcessInstance(loginUser, projectCode, 1,
|
||||||
|
taskRelationJson, taskDefinitionJson, "2020-02-21 00:00:00", Boolean.FALSE, "", "", 0);
|
||||||
|
Assertions.assertEquals(Status.SUCCESS, successRes.get(Constants.STATUS));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
||||||
|
|
@ -17,13 +17,19 @@
|
||||||
|
|
||||||
package org.apache.dolphinscheduler.api.service;
|
package org.apache.dolphinscheduler.api.service;
|
||||||
|
|
||||||
|
import static org.apache.dolphinscheduler.api.AssertionsHelper.assertDoesNotThrow;
|
||||||
|
import static org.apache.dolphinscheduler.api.AssertionsHelper.assertThrowsServiceException;
|
||||||
import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TASK_DEFINITION;
|
import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TASK_DEFINITION;
|
||||||
import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TASK_DEFINITION_CREATE;
|
import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TASK_DEFINITION_CREATE;
|
||||||
import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TASK_DEFINITION_DELETE;
|
import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TASK_DEFINITION_DELETE;
|
||||||
import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TASK_DEFINITION_UPDATE;
|
import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TASK_DEFINITION_UPDATE;
|
||||||
import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_SWITCH_TO_THIS_VERSION;
|
import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_SWITCH_TO_THIS_VERSION;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.ArgumentMatchers.isA;
|
import static org.mockito.ArgumentMatchers.isA;
|
||||||
|
import static org.mockito.Mockito.doNothing;
|
||||||
|
import static org.mockito.Mockito.doThrow;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.api.dto.task.TaskCreateRequest;
|
import org.apache.dolphinscheduler.api.dto.task.TaskCreateRequest;
|
||||||
import org.apache.dolphinscheduler.api.dto.task.TaskUpdateRequest;
|
import org.apache.dolphinscheduler.api.dto.task.TaskUpdateRequest;
|
||||||
|
|
@ -75,13 +81,17 @@ import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
import org.mockito.InjectMocks;
|
import org.mockito.InjectMocks;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.MockedStatic;
|
||||||
import org.mockito.Mockito;
|
import org.mockito.Mockito;
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
import org.mockito.junit.jupiter.MockitoSettings;
|
||||||
|
import org.mockito.quality.Strictness;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
@ExtendWith(MockitoExtension.class)
|
||||||
|
@MockitoSettings(strictness = Strictness.LENIENT)
|
||||||
public class TaskDefinitionServiceImplTest {
|
public class TaskDefinitionServiceImplTest {
|
||||||
|
|
||||||
@InjectMocks
|
@InjectMocks
|
||||||
|
|
@ -114,9 +124,6 @@ public class TaskDefinitionServiceImplTest {
|
||||||
@Mock
|
@Mock
|
||||||
private ProcessTaskRelationMapper processTaskRelationMapper;
|
private ProcessTaskRelationMapper processTaskRelationMapper;
|
||||||
|
|
||||||
@Mock
|
|
||||||
private TaskPluginManager taskPluginManager;
|
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private ProcessTaskRelationService processTaskRelationService;
|
private ProcessTaskRelationService processTaskRelationService;
|
||||||
|
|
||||||
|
|
@ -155,61 +162,73 @@ public class TaskDefinitionServiceImplTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void createTaskDefinition() {
|
public void createTaskDefinition() {
|
||||||
Project project = getProject();
|
try (
|
||||||
Mockito.when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(project);
|
MockedStatic<TaskPluginManager> taskPluginManagerMockedStatic =
|
||||||
|
Mockito.mockStatic(TaskPluginManager.class)) {
|
||||||
|
taskPluginManagerMockedStatic.when(() -> TaskPluginManager.checkTaskParameters(Mockito.any()))
|
||||||
|
.thenReturn(true);
|
||||||
|
Project project = getProject();
|
||||||
|
when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(project);
|
||||||
|
|
||||||
Map<String, Object> result = new HashMap<>();
|
Map<String, Object> result = new HashMap<>();
|
||||||
Mockito.when(projectService.hasProjectAndWritePerm(user, project, result))
|
when(projectService.hasProjectAndWritePerm(user, project, result))
|
||||||
.thenReturn(true);
|
.thenReturn(true);
|
||||||
Mockito.when(taskPluginManager.checkTaskParameters(Mockito.any())).thenReturn(true);
|
|
||||||
|
|
||||||
String createTaskDefinitionJson =
|
String createTaskDefinitionJson =
|
||||||
"[{\"name\":\"detail_up\",\"description\":\"\",\"taskType\":\"SHELL\",\"taskParams\":"
|
"[{\"name\":\"detail_up\",\"description\":\"\",\"taskType\":\"SHELL\",\"taskParams\":"
|
||||||
+ "\"{\\\"resourceList\\\":[],\\\"localParams\\\":[{\\\"prop\\\":\\\"datetime\\\",\\\"direct\\\":\\\"IN\\\","
|
+ "\"{\\\"resourceList\\\":[],\\\"localParams\\\":[{\\\"prop\\\":\\\"datetime\\\",\\\"direct\\\":\\\"IN\\\","
|
||||||
+ "\\\"type\\\":\\\"VARCHAR\\\",\\\"value\\\":\\\"${system.datetime}\\\"}],\\\"rawScript\\\":"
|
+ "\\\"type\\\":\\\"VARCHAR\\\",\\\"value\\\":\\\"${system.datetime}\\\"}],\\\"rawScript\\\":"
|
||||||
+ "\\\"echo ${datetime}\\\",\\\"conditionResult\\\":\\\"{\\\\\\\"successNode\\\\\\\":[\\\\\\\"\\\\\\\"],"
|
+ "\\\"echo ${datetime}\\\",\\\"conditionResult\\\":\\\"{\\\\\\\"successNode\\\\\\\":[\\\\\\\"\\\\\\\"],"
|
||||||
+ "\\\\\\\"failedNode\\\\\\\":[\\\\\\\"\\\\\\\"]}\\\",\\\"dependence\\\":{}}\",\"flag\":0,\"taskPriority\":0,"
|
+ "\\\\\\\"failedNode\\\\\\\":[\\\\\\\"\\\\\\\"]}\\\",\\\"dependence\\\":{}}\",\"flag\":0,\"taskPriority\":0,"
|
||||||
+ "\"workerGroup\":\"default\",\"failRetryTimes\":0,\"failRetryInterval\":0,\"timeoutFlag\":0,"
|
+ "\"workerGroup\":\"default\",\"failRetryTimes\":0,\"failRetryInterval\":0,\"timeoutFlag\":0,"
|
||||||
+ "\"timeoutNotifyStrategy\":0,\"timeout\":0,\"delayTime\":0,\"resourceIds\":\"\"}]";
|
+ "\"timeoutNotifyStrategy\":0,\"timeout\":0,\"delayTime\":0,\"resourceIds\":\"\"}]";
|
||||||
Map<String, Object> relation = taskDefinitionService
|
Map<String, Object> relation = taskDefinitionService
|
||||||
.createTaskDefinition(user, PROJECT_CODE, createTaskDefinitionJson);
|
.createTaskDefinition(user, PROJECT_CODE, createTaskDefinitionJson);
|
||||||
Assertions.assertEquals(Status.SUCCESS, relation.get(Constants.STATUS));
|
assertEquals(Status.SUCCESS, relation.get(Constants.STATUS));
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void updateTaskDefinition() {
|
public void updateTaskDefinition() {
|
||||||
String taskDefinitionJson = getTaskDefinitionJson();;
|
try (
|
||||||
|
MockedStatic<TaskPluginManager> taskPluginManagerMockedStatic =
|
||||||
|
Mockito.mockStatic(TaskPluginManager.class)) {
|
||||||
|
taskPluginManagerMockedStatic.when(() -> TaskPluginManager.checkTaskParameters(Mockito.any()))
|
||||||
|
.thenReturn(true);
|
||||||
|
String taskDefinitionJson = getTaskDefinitionJson();
|
||||||
|
|
||||||
Project project = getProject();
|
Project project = getProject();
|
||||||
Mockito.when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(project);
|
when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(project);
|
||||||
|
|
||||||
Map<String, Object> result = new HashMap<>();
|
Map<String, Object> result = new HashMap<>();
|
||||||
putMsg(result, Status.SUCCESS, PROJECT_CODE);
|
putMsg(result, Status.SUCCESS, PROJECT_CODE);
|
||||||
Mockito.when(projectService.hasProjectAndWritePerm(user, project, new HashMap<>())).thenReturn(true);
|
when(projectService.hasProjectAndWritePerm(user, project, new HashMap<>())).thenReturn(true);
|
||||||
|
|
||||||
Mockito.when(processService.isTaskOnline(TASK_CODE)).thenReturn(Boolean.FALSE);
|
when(processService.isTaskOnline(TASK_CODE)).thenReturn(Boolean.FALSE);
|
||||||
Mockito.when(taskDefinitionMapper.queryByCode(TASK_CODE)).thenReturn(new TaskDefinition());
|
when(taskDefinitionMapper.queryByCode(TASK_CODE)).thenReturn(new TaskDefinition());
|
||||||
Mockito.when(taskDefinitionMapper.updateById(Mockito.any(TaskDefinitionLog.class))).thenReturn(1);
|
when(taskDefinitionMapper.updateById(Mockito.any(TaskDefinitionLog.class))).thenReturn(1);
|
||||||
Mockito.when(taskDefinitionLogMapper.insert(Mockito.any(TaskDefinitionLog.class))).thenReturn(1);
|
when(taskDefinitionLogMapper.insert(Mockito.any(TaskDefinitionLog.class))).thenReturn(1);
|
||||||
Mockito.when(processTaskRelationLogDao.insert(Mockito.any(ProcessTaskRelationLog.class))).thenReturn(1);
|
when(processTaskRelationLogDao.insert(Mockito.any(ProcessTaskRelationLog.class))).thenReturn(1);
|
||||||
Mockito.when(processDefinitionMapper.queryByCode(2L)).thenReturn(new ProcessDefinition());
|
when(processDefinitionMapper.queryByCode(2L)).thenReturn(new ProcessDefinition());
|
||||||
Mockito.when(processDefinitionMapper.updateById(Mockito.any(ProcessDefinition.class))).thenReturn(1);
|
when(processDefinitionMapper.updateById(Mockito.any(ProcessDefinition.class))).thenReturn(1);
|
||||||
Mockito.when(processDefinitionLogMapper.insert(Mockito.any(ProcessDefinitionLog.class))).thenReturn(1);
|
when(processDefinitionLogMapper.insert(Mockito.any(ProcessDefinitionLog.class))).thenReturn(1);
|
||||||
Mockito.when(taskDefinitionLogMapper.queryMaxVersionForDefinition(TASK_CODE)).thenReturn(1);
|
when(taskDefinitionLogMapper.queryMaxVersionForDefinition(TASK_CODE)).thenReturn(1);
|
||||||
Mockito.when(taskPluginManager.checkTaskParameters(Mockito.any())).thenReturn(true);
|
when(processTaskRelationMapper.queryProcessTaskRelationByTaskCodeAndTaskVersion(TASK_CODE, 0))
|
||||||
Mockito.when(processTaskRelationMapper.queryProcessTaskRelationByTaskCodeAndTaskVersion(TASK_CODE, 0))
|
.thenReturn(getProcessTaskRelationList2());
|
||||||
.thenReturn(getProcessTaskRelationList2());
|
when(processTaskRelationMapper
|
||||||
Mockito.when(processTaskRelationMapper
|
.updateProcessTaskRelationTaskVersion(Mockito.any(ProcessTaskRelation.class))).thenReturn(1);
|
||||||
.updateProcessTaskRelationTaskVersion(Mockito.any(ProcessTaskRelation.class))).thenReturn(1);
|
result = taskDefinitionService.updateTaskDefinition(user, PROJECT_CODE, TASK_CODE, taskDefinitionJson);
|
||||||
result = taskDefinitionService.updateTaskDefinition(user, PROJECT_CODE, TASK_CODE, taskDefinitionJson);
|
assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
|
||||||
Assertions.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
|
// failure
|
||||||
// failure
|
when(processTaskRelationMapper
|
||||||
Mockito.when(processTaskRelationMapper
|
.updateProcessTaskRelationTaskVersion(Mockito.any(ProcessTaskRelation.class))).thenReturn(2);
|
||||||
.updateProcessTaskRelationTaskVersion(Mockito.any(ProcessTaskRelation.class))).thenReturn(2);
|
exception = Assertions.assertThrows(ServiceException.class,
|
||||||
exception = Assertions.assertThrows(ServiceException.class,
|
() -> taskDefinitionService.updateTaskDefinition(user, PROJECT_CODE, TASK_CODE,
|
||||||
() -> taskDefinitionService.updateTaskDefinition(user, PROJECT_CODE, TASK_CODE, taskDefinitionJson));
|
taskDefinitionJson));
|
||||||
Assertions.assertEquals(Status.PROCESS_TASK_RELATION_BATCH_UPDATE_ERROR.getCode(),
|
assertEquals(Status.PROCESS_TASK_RELATION_BATCH_UPDATE_ERROR.getCode(),
|
||||||
((ServiceException) exception).getCode());
|
((ServiceException) exception).getCode());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -217,72 +236,72 @@ public class TaskDefinitionServiceImplTest {
|
||||||
public void queryTaskDefinitionByName() {
|
public void queryTaskDefinitionByName() {
|
||||||
String taskName = "task";
|
String taskName = "task";
|
||||||
Project project = getProject();
|
Project project = getProject();
|
||||||
Mockito.when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(project);
|
when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(project);
|
||||||
|
|
||||||
Map<String, Object> result = new HashMap<>();
|
Map<String, Object> result = new HashMap<>();
|
||||||
putMsg(result, Status.SUCCESS, PROJECT_CODE);
|
putMsg(result, Status.SUCCESS, PROJECT_CODE);
|
||||||
Mockito.when(projectService.checkProjectAndAuth(user, project, PROJECT_CODE, TASK_DEFINITION))
|
when(projectService.checkProjectAndAuth(user, project, PROJECT_CODE, TASK_DEFINITION))
|
||||||
.thenReturn(result);
|
.thenReturn(result);
|
||||||
|
|
||||||
Mockito.when(taskDefinitionMapper.queryByName(project.getCode(), PROCESS_DEFINITION_CODE, taskName))
|
when(taskDefinitionMapper.queryByName(project.getCode(), PROCESS_DEFINITION_CODE, taskName))
|
||||||
.thenReturn(new TaskDefinition());
|
.thenReturn(new TaskDefinition());
|
||||||
|
|
||||||
Map<String, Object> relation = taskDefinitionService
|
Map<String, Object> relation = taskDefinitionService
|
||||||
.queryTaskDefinitionByName(user, PROJECT_CODE, PROCESS_DEFINITION_CODE, taskName);
|
.queryTaskDefinitionByName(user, PROJECT_CODE, PROCESS_DEFINITION_CODE, taskName);
|
||||||
|
|
||||||
Assertions.assertEquals(Status.SUCCESS, relation.get(Constants.STATUS));
|
assertEquals(Status.SUCCESS, relation.get(Constants.STATUS));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void deleteTaskDefinitionByCode() {
|
public void deleteTaskDefinitionByCode() {
|
||||||
Project project = getProject();
|
Project project = getProject();
|
||||||
Mockito.when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(project);
|
when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(project);
|
||||||
|
|
||||||
// error task definition not find
|
// error task definition not find
|
||||||
exception = Assertions.assertThrows(ServiceException.class,
|
exception = Assertions.assertThrows(ServiceException.class,
|
||||||
() -> taskDefinitionService.deleteTaskDefinitionByCode(user, TASK_CODE));
|
() -> taskDefinitionService.deleteTaskDefinitionByCode(user, TASK_CODE));
|
||||||
Assertions.assertEquals(Status.TASK_DEFINE_NOT_EXIST.getCode(), ((ServiceException) exception).getCode());
|
assertEquals(Status.TASK_DEFINE_NOT_EXIST.getCode(), ((ServiceException) exception).getCode());
|
||||||
|
|
||||||
// error delete single task definition object
|
// error delete single task definition object
|
||||||
Mockito.when(taskDefinitionMapper.queryByCode(TASK_CODE)).thenReturn(getTaskDefinition());
|
when(taskDefinitionMapper.queryByCode(TASK_CODE)).thenReturn(getTaskDefinition());
|
||||||
Mockito.when(taskDefinitionMapper.deleteByCode(TASK_CODE)).thenReturn(0);
|
when(taskDefinitionMapper.deleteByCode(TASK_CODE)).thenReturn(0);
|
||||||
Mockito.when(projectService.hasProjectAndWritePerm(user, project, new HashMap<>())).thenReturn(true);
|
when(projectService.hasProjectAndWritePerm(user, project, new HashMap<>())).thenReturn(true);
|
||||||
exception = Assertions.assertThrows(ServiceException.class,
|
exception = Assertions.assertThrows(ServiceException.class,
|
||||||
() -> taskDefinitionService.deleteTaskDefinitionByCode(user, TASK_CODE));
|
() -> taskDefinitionService.deleteTaskDefinitionByCode(user, TASK_CODE));
|
||||||
Assertions.assertEquals(Status.DELETE_TASK_DEFINE_BY_CODE_MSG_ERROR.getCode(),
|
assertEquals(Status.DELETE_TASK_DEFINE_BY_CODE_MSG_ERROR.getCode(),
|
||||||
((ServiceException) exception).getCode());
|
((ServiceException) exception).getCode());
|
||||||
|
|
||||||
// success
|
// success
|
||||||
Mockito.doNothing().when(projectService).checkProjectAndAuthThrowException(user, project,
|
doNothing().when(projectService).checkProjectAndAuthThrowException(user, project,
|
||||||
TASK_DEFINITION_DELETE);
|
TASK_DEFINITION_DELETE);
|
||||||
Mockito.when(processTaskRelationMapper.queryDownstreamByTaskCode(TASK_CODE)).thenReturn(new ArrayList<>());
|
when(processTaskRelationMapper.queryDownstreamByTaskCode(TASK_CODE)).thenReturn(new ArrayList<>());
|
||||||
Mockito.when(taskDefinitionMapper.deleteByCode(TASK_CODE)).thenReturn(1);
|
when(taskDefinitionMapper.deleteByCode(TASK_CODE)).thenReturn(1);
|
||||||
Assertions.assertDoesNotThrow(() -> taskDefinitionService.deleteTaskDefinitionByCode(user, TASK_CODE));
|
Assertions.assertDoesNotThrow(() -> taskDefinitionService.deleteTaskDefinitionByCode(user, TASK_CODE));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void switchVersion() {
|
public void switchVersion() {
|
||||||
Project project = getProject();
|
Project project = getProject();
|
||||||
Mockito.when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(project);
|
when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(project);
|
||||||
|
|
||||||
Map<String, Object> result = new HashMap<>();
|
Map<String, Object> result = new HashMap<>();
|
||||||
|
|
||||||
putMsg(result, Status.SUCCESS, PROJECT_CODE);
|
putMsg(result, Status.SUCCESS, PROJECT_CODE);
|
||||||
Mockito.when(
|
when(
|
||||||
projectService.checkProjectAndAuth(user, project, PROJECT_CODE, WORKFLOW_SWITCH_TO_THIS_VERSION))
|
projectService.checkProjectAndAuth(user, project, PROJECT_CODE, WORKFLOW_SWITCH_TO_THIS_VERSION))
|
||||||
.thenReturn(result);
|
.thenReturn(result);
|
||||||
|
|
||||||
Mockito.when(taskDefinitionLogMapper.queryByDefinitionCodeAndVersion(TASK_CODE, VERSION))
|
when(taskDefinitionLogMapper.queryByDefinitionCodeAndVersion(TASK_CODE, VERSION))
|
||||||
.thenReturn(new TaskDefinitionLog());
|
.thenReturn(new TaskDefinitionLog());
|
||||||
TaskDefinition taskDefinition = new TaskDefinition();
|
TaskDefinition taskDefinition = new TaskDefinition();
|
||||||
taskDefinition.setProjectCode(PROJECT_CODE);
|
taskDefinition.setProjectCode(PROJECT_CODE);
|
||||||
Mockito.when(taskDefinitionMapper.queryByCode(TASK_CODE))
|
when(taskDefinitionMapper.queryByCode(TASK_CODE))
|
||||||
.thenReturn(taskDefinition);
|
.thenReturn(taskDefinition);
|
||||||
Mockito.when(taskDefinitionMapper.updateById(new TaskDefinitionLog())).thenReturn(1);
|
when(taskDefinitionMapper.updateById(new TaskDefinitionLog())).thenReturn(1);
|
||||||
Map<String, Object> relation = taskDefinitionService
|
Map<String, Object> relation = taskDefinitionService
|
||||||
.switchVersion(user, PROJECT_CODE, TASK_CODE, VERSION);
|
.switchVersion(user, PROJECT_CODE, TASK_CODE, VERSION);
|
||||||
|
|
||||||
Assertions.assertEquals(Status.SUCCESS, relation.get(Constants.STATUS));
|
assertEquals(Status.SUCCESS, relation.get(Constants.STATUS));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void putMsg(Map<String, Object> result, Status status, Object... statusParams) {
|
private void putMsg(Map<String, Object> result, Status status, Object... statusParams) {
|
||||||
|
|
@ -331,7 +350,7 @@ public class TaskDefinitionServiceImplTest {
|
||||||
@Test
|
@Test
|
||||||
public void genTaskCodeList() {
|
public void genTaskCodeList() {
|
||||||
Map<String, Object> genTaskCodeList = taskDefinitionService.genTaskCodeList(10);
|
Map<String, Object> genTaskCodeList = taskDefinitionService.genTaskCodeList(10);
|
||||||
Assertions.assertEquals(Status.SUCCESS, genTaskCodeList.get(Constants.STATUS));
|
assertEquals(Status.SUCCESS, genTaskCodeList.get(Constants.STATUS));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -348,31 +367,31 @@ public class TaskDefinitionServiceImplTest {
|
||||||
taskMainInfo.setUpstreamTaskName("4");
|
taskMainInfo.setUpstreamTaskName("4");
|
||||||
taskMainInfoIPage.setRecords(Collections.singletonList(taskMainInfo));
|
taskMainInfoIPage.setRecords(Collections.singletonList(taskMainInfo));
|
||||||
taskMainInfoIPage.setTotal(10L);
|
taskMainInfoIPage.setTotal(10L);
|
||||||
Mockito.when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(project);
|
when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(project);
|
||||||
Mockito.when(projectService.checkProjectAndAuth(user, project, PROJECT_CODE, TASK_DEFINITION))
|
when(projectService.checkProjectAndAuth(user, project, PROJECT_CODE, TASK_DEFINITION))
|
||||||
.thenReturn(checkResult);
|
.thenReturn(checkResult);
|
||||||
Mockito.when(taskDefinitionMapper.queryDefineListPaging(Mockito.any(Page.class), Mockito.anyLong(),
|
when(taskDefinitionMapper.queryDefineListPaging(Mockito.any(Page.class), Mockito.anyLong(),
|
||||||
Mockito.isNull(), Mockito.anyString(), Mockito.isNull()))
|
Mockito.isNull(), Mockito.anyString(), Mockito.isNull()))
|
||||||
.thenReturn(taskMainInfoIPage);
|
.thenReturn(taskMainInfoIPage);
|
||||||
Mockito.when(taskDefinitionMapper.queryDefineListByCodeList(PROJECT_CODE, Collections.singletonList(3L)))
|
when(taskDefinitionMapper.queryDefineListByCodeList(PROJECT_CODE, Collections.singletonList(3L)))
|
||||||
.thenReturn(Collections.singletonList(taskMainInfo));
|
.thenReturn(Collections.singletonList(taskMainInfo));
|
||||||
Result result = taskDefinitionService.queryTaskDefinitionListPaging(user, PROJECT_CODE,
|
Result result = taskDefinitionService.queryTaskDefinitionListPaging(user, PROJECT_CODE,
|
||||||
null, null, null, pageNo, pageSize);
|
null, null, null, pageNo, pageSize);
|
||||||
Assertions.assertEquals(Status.SUCCESS.getMsg(), result.getMsg());
|
assertEquals(Status.SUCCESS.getMsg(), result.getMsg());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testReleaseTaskDefinition() {
|
public void testReleaseTaskDefinition() {
|
||||||
Mockito.when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(getProject());
|
when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(getProject());
|
||||||
Project project = getProject();
|
Project project = getProject();
|
||||||
|
|
||||||
// check task dose not exist
|
// check task dose not exist
|
||||||
Map<String, Object> result = new HashMap<>();
|
Map<String, Object> result = new HashMap<>();
|
||||||
putMsg(result, Status.TASK_DEFINE_NOT_EXIST, TASK_CODE);
|
putMsg(result, Status.TASK_DEFINE_NOT_EXIST, TASK_CODE);
|
||||||
Mockito.when(projectService.checkProjectAndAuth(user, project, PROJECT_CODE, null)).thenReturn(result);
|
when(projectService.checkProjectAndAuth(user, project, PROJECT_CODE, null)).thenReturn(result);
|
||||||
Map<String, Object> map =
|
Map<String, Object> map =
|
||||||
taskDefinitionService.releaseTaskDefinition(user, PROJECT_CODE, TASK_CODE, ReleaseState.OFFLINE);
|
taskDefinitionService.releaseTaskDefinition(user, PROJECT_CODE, TASK_CODE, ReleaseState.OFFLINE);
|
||||||
Assertions.assertEquals(Status.TASK_DEFINE_NOT_EXIST, map.get(Constants.STATUS));
|
assertEquals(Status.TASK_DEFINE_NOT_EXIST, map.get(Constants.STATUS));
|
||||||
|
|
||||||
// process definition offline
|
// process definition offline
|
||||||
putMsg(result, Status.SUCCESS);
|
putMsg(result, Status.SUCCESS);
|
||||||
|
|
@ -384,23 +403,23 @@ public class TaskDefinitionServiceImplTest {
|
||||||
"{\"resourceList\":[],\"localParams\":[],\"rawScript\":\"echo 1\",\"conditionResult\":{\"successNode\":[\"\"],\"failedNode\":[\"\"]},\"dependence\":{}}";
|
"{\"resourceList\":[],\"localParams\":[],\"rawScript\":\"echo 1\",\"conditionResult\":{\"successNode\":[\"\"],\"failedNode\":[\"\"]},\"dependence\":{}}";
|
||||||
taskDefinition.setTaskParams(params);
|
taskDefinition.setTaskParams(params);
|
||||||
taskDefinition.setTaskType("SHELL");
|
taskDefinition.setTaskType("SHELL");
|
||||||
Mockito.when(taskDefinitionMapper.queryByCode(TASK_CODE)).thenReturn(taskDefinition);
|
when(taskDefinitionMapper.queryByCode(TASK_CODE)).thenReturn(taskDefinition);
|
||||||
TaskDefinitionLog taskDefinitionLog = new TaskDefinitionLog(taskDefinition);
|
TaskDefinitionLog taskDefinitionLog = new TaskDefinitionLog(taskDefinition);
|
||||||
Mockito.when(taskDefinitionLogMapper.queryByDefinitionCodeAndVersion(TASK_CODE, taskDefinition.getVersion()))
|
when(taskDefinitionLogMapper.queryByDefinitionCodeAndVersion(TASK_CODE, taskDefinition.getVersion()))
|
||||||
.thenReturn(taskDefinitionLog);
|
.thenReturn(taskDefinitionLog);
|
||||||
Map<String, Object> offlineTaskResult =
|
Map<String, Object> offlineTaskResult =
|
||||||
taskDefinitionService.releaseTaskDefinition(user, PROJECT_CODE, TASK_CODE, ReleaseState.OFFLINE);
|
taskDefinitionService.releaseTaskDefinition(user, PROJECT_CODE, TASK_CODE, ReleaseState.OFFLINE);
|
||||||
Assertions.assertEquals(Status.SUCCESS, offlineTaskResult.get(Constants.STATUS));
|
assertEquals(Status.SUCCESS, offlineTaskResult.get(Constants.STATUS));
|
||||||
|
|
||||||
// process definition online, resource exist
|
// process definition online, resource exist
|
||||||
Map<String, Object> onlineTaskResult =
|
Map<String, Object> onlineTaskResult =
|
||||||
taskDefinitionService.releaseTaskDefinition(user, PROJECT_CODE, TASK_CODE, ReleaseState.ONLINE);
|
taskDefinitionService.releaseTaskDefinition(user, PROJECT_CODE, TASK_CODE, ReleaseState.ONLINE);
|
||||||
Assertions.assertEquals(Status.SUCCESS, onlineTaskResult.get(Constants.STATUS));
|
assertEquals(Status.SUCCESS, onlineTaskResult.get(Constants.STATUS));
|
||||||
|
|
||||||
// release error code
|
// release error code
|
||||||
Map<String, Object> failResult =
|
Map<String, Object> failResult =
|
||||||
taskDefinitionService.releaseTaskDefinition(user, PROJECT_CODE, TASK_CODE, ReleaseState.getEnum(2));
|
taskDefinitionService.releaseTaskDefinition(user, PROJECT_CODE, TASK_CODE, ReleaseState.getEnum(2));
|
||||||
Assertions.assertEquals(Status.REQUEST_PARAMS_NOT_VALID_ERROR, failResult.get(Constants.STATUS));
|
assertEquals(Status.REQUEST_PARAMS_NOT_VALID_ERROR, failResult.get(Constants.STATUS));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -410,133 +429,127 @@ public class TaskDefinitionServiceImplTest {
|
||||||
taskCreateRequest.setWorkflowCode(PROCESS_DEFINITION_CODE);
|
taskCreateRequest.setWorkflowCode(PROCESS_DEFINITION_CODE);
|
||||||
|
|
||||||
// error process definition not find
|
// error process definition not find
|
||||||
exception = Assertions.assertThrows(ServiceException.class,
|
assertThrowsServiceException(Status.PROCESS_DEFINE_NOT_EXIST,
|
||||||
() -> taskDefinitionService.createTaskDefinitionV2(user, taskCreateRequest));
|
() -> taskDefinitionService.createTaskDefinitionV2(user, taskCreateRequest));
|
||||||
Assertions.assertEquals(Status.PROCESS_DEFINE_NOT_EXIST.getCode(), ((ServiceException) exception).getCode());
|
|
||||||
|
|
||||||
// error project not find
|
// error project not find
|
||||||
Mockito.when(processDefinitionMapper.queryByCode(PROCESS_DEFINITION_CODE)).thenReturn(getProcessDefinition());
|
when(processDefinitionMapper.queryByCode(PROCESS_DEFINITION_CODE)).thenReturn(getProcessDefinition());
|
||||||
Mockito.when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(getProject());
|
when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(getProject());
|
||||||
Mockito.doThrow(new ServiceException(Status.PROJECT_NOT_EXIST)).when(projectService)
|
doThrow(new ServiceException(Status.PROJECT_NOT_EXIST)).when(projectService)
|
||||||
.checkProjectAndAuthThrowException(user, getProject(), TASK_DEFINITION_CREATE);
|
.checkProjectAndAuthThrowException(user, getProject(), TASK_DEFINITION_CREATE);
|
||||||
exception = Assertions.assertThrows(ServiceException.class,
|
assertThrowsServiceException(Status.PROJECT_NOT_EXIST,
|
||||||
() -> taskDefinitionService.createTaskDefinitionV2(user, taskCreateRequest));
|
() -> taskDefinitionService.createTaskDefinitionV2(user, taskCreateRequest));
|
||||||
Assertions.assertEquals(Status.PROJECT_NOT_EXIST.getCode(), ((ServiceException) exception).getCode());
|
|
||||||
|
|
||||||
// error task definition
|
// error task definition
|
||||||
taskCreateRequest.setTaskParams(TASK_PARAMETER);
|
taskCreateRequest.setTaskParams(TASK_PARAMETER);
|
||||||
Mockito.doNothing().when(projectService).checkProjectAndAuthThrowException(user, getProject(),
|
doNothing().when(projectService).checkProjectAndAuthThrowException(user, getProject(), TASK_DEFINITION_CREATE);
|
||||||
TASK_DEFINITION_CREATE);
|
assertThrowsServiceException(Status.PROCESS_NODE_S_PARAMETER_INVALID,
|
||||||
exception = Assertions.assertThrows(ServiceException.class,
|
|
||||||
() -> taskDefinitionService.createTaskDefinitionV2(user, taskCreateRequest));
|
() -> taskDefinitionService.createTaskDefinitionV2(user, taskCreateRequest));
|
||||||
Assertions.assertEquals(Status.PROCESS_NODE_S_PARAMETER_INVALID.getCode(),
|
|
||||||
((ServiceException) exception).getCode());
|
|
||||||
|
|
||||||
// error create task definition object
|
try (
|
||||||
Mockito.when(taskPluginManager.checkTaskParameters(Mockito.any())).thenReturn(true);
|
MockedStatic<TaskPluginManager> taskPluginManagerMockedStatic =
|
||||||
Mockito.when(taskDefinitionMapper.insert(isA(TaskDefinition.class))).thenReturn(0);
|
Mockito.mockStatic(TaskPluginManager.class)) {
|
||||||
exception = Assertions.assertThrows(ServiceException.class,
|
taskPluginManagerMockedStatic.when(() -> TaskPluginManager.checkTaskParameters(Mockito.any()))
|
||||||
() -> taskDefinitionService.createTaskDefinitionV2(user, taskCreateRequest));
|
.thenReturn(true);
|
||||||
Assertions.assertEquals(Status.CREATE_TASK_DEFINITION_ERROR.getCode(),
|
|
||||||
((ServiceException) exception).getCode());
|
|
||||||
|
|
||||||
// error sync to task definition log
|
// error create task definition object
|
||||||
Mockito.when(taskDefinitionMapper.insert(isA(TaskDefinition.class))).thenReturn(1);
|
when(taskDefinitionMapper.insert(isA(TaskDefinition.class))).thenReturn(0);
|
||||||
Mockito.when(taskDefinitionLogMapper.insert(isA(TaskDefinitionLog.class))).thenReturn(0);
|
assertThrowsServiceException(Status.CREATE_TASK_DEFINITION_ERROR,
|
||||||
exception = Assertions.assertThrows(ServiceException.class,
|
() -> taskDefinitionService.createTaskDefinitionV2(user, taskCreateRequest));
|
||||||
() -> taskDefinitionService.createTaskDefinitionV2(user, taskCreateRequest));
|
|
||||||
Assertions.assertEquals(Status.CREATE_TASK_DEFINITION_LOG_ERROR.getCode(),
|
|
||||||
((ServiceException) exception).getCode());
|
|
||||||
|
|
||||||
// success
|
// error sync to task definition log
|
||||||
Mockito.when(taskDefinitionLogMapper.insert(isA(TaskDefinitionLog.class))).thenReturn(1);
|
when(taskDefinitionMapper.insert(isA(TaskDefinition.class))).thenReturn(1);
|
||||||
// we do not test updateUpstreamTaskDefinition, because it should be tested in processTaskRelationService
|
when(taskDefinitionLogMapper.insert(isA(TaskDefinitionLog.class))).thenReturn(0);
|
||||||
Mockito.when(
|
assertThrowsServiceException(Status.CREATE_TASK_DEFINITION_LOG_ERROR,
|
||||||
processTaskRelationService.updateUpstreamTaskDefinitionWithSyncDag(isA(User.class), isA(Long.class),
|
() -> taskDefinitionService.createTaskDefinitionV2(user, taskCreateRequest));
|
||||||
isA(Boolean.class),
|
|
||||||
isA(TaskRelationUpdateUpstreamRequest.class)))
|
// success
|
||||||
.thenReturn(getProcessTaskRelationList());
|
when(taskDefinitionLogMapper.insert(isA(TaskDefinitionLog.class))).thenReturn(1);
|
||||||
Mockito.when(processDefinitionService.updateSingleProcessDefinition(isA(User.class), isA(Long.class),
|
// we do not test updateUpstreamTaskDefinition, because it should be tested in processTaskRelationService
|
||||||
isA(WorkflowUpdateRequest.class))).thenReturn(getProcessDefinition());
|
when(
|
||||||
Assertions.assertDoesNotThrow(() -> taskDefinitionService.createTaskDefinitionV2(user, taskCreateRequest));
|
processTaskRelationService.updateUpstreamTaskDefinitionWithSyncDag(isA(User.class), isA(Long.class),
|
||||||
|
isA(Boolean.class),
|
||||||
|
isA(TaskRelationUpdateUpstreamRequest.class)))
|
||||||
|
.thenReturn(getProcessTaskRelationList());
|
||||||
|
when(processDefinitionService.updateSingleProcessDefinition(isA(User.class), isA(Long.class),
|
||||||
|
isA(WorkflowUpdateRequest.class))).thenReturn(getProcessDefinition());
|
||||||
|
assertDoesNotThrow(() -> taskDefinitionService.createTaskDefinitionV2(user, taskCreateRequest));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUpdateTaskDefinitionV2() {
|
public void testUpdateTaskDefinitionV2() {
|
||||||
TaskUpdateRequest taskUpdateRequest = new TaskUpdateRequest();
|
TaskUpdateRequest taskUpdateRequest = new TaskUpdateRequest();
|
||||||
|
TaskDefinition taskDefinition = getTaskDefinition();
|
||||||
|
Project project = getProject();
|
||||||
|
|
||||||
// error task definition not exists
|
// error task definition not exists
|
||||||
exception = Assertions.assertThrows(ServiceException.class,
|
assertThrowsServiceException(Status.TASK_DEFINITION_NOT_EXISTS,
|
||||||
() -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest));
|
() -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest));
|
||||||
Assertions.assertEquals(Status.TASK_DEFINITION_NOT_EXISTS.getCode(), ((ServiceException) exception).getCode());
|
|
||||||
|
|
||||||
// error project not find
|
// error project not find
|
||||||
Mockito.when(taskDefinitionMapper.queryByCode(TASK_CODE)).thenReturn(getTaskDefinition());
|
when(taskDefinitionMapper.queryByCode(TASK_CODE)).thenReturn(taskDefinition);
|
||||||
Mockito.when(projectMapper.queryByCode(isA(Long.class))).thenReturn(getProject());
|
when(projectMapper.queryByCode(isA(Long.class))).thenReturn(project);
|
||||||
Mockito.doThrow(new ServiceException(Status.PROJECT_NOT_EXIST)).when(projectService)
|
doThrow(new ServiceException(Status.PROJECT_NOT_EXIST)).when(projectService)
|
||||||
.checkProjectAndAuthThrowException(user, getProject(), TASK_DEFINITION_UPDATE);
|
.checkProjectAndAuthThrowException(user, project, TASK_DEFINITION_UPDATE);
|
||||||
exception = Assertions.assertThrows(ServiceException.class,
|
assertThrowsServiceException(Status.PROJECT_NOT_EXIST,
|
||||||
() -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest));
|
() -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest));
|
||||||
Assertions.assertEquals(Status.PROJECT_NOT_EXIST.getCode(), ((ServiceException) exception).getCode());
|
|
||||||
|
|
||||||
// error task definition
|
// error task definition
|
||||||
Mockito.doNothing().when(projectService).checkProjectAndAuthThrowException(user, getProject(),
|
doNothing().when(projectService).checkProjectAndAuthThrowException(user, project, TASK_DEFINITION_UPDATE);
|
||||||
TASK_DEFINITION_UPDATE);
|
|
||||||
exception = Assertions.assertThrows(ServiceException.class,
|
|
||||||
() -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest));
|
|
||||||
Assertions.assertEquals(Status.PROCESS_NODE_S_PARAMETER_INVALID.getCode(),
|
|
||||||
((ServiceException) exception).getCode());
|
|
||||||
|
|
||||||
// error task definition already online
|
try (
|
||||||
exception = Assertions.assertThrows(ServiceException.class,
|
MockedStatic<TaskPluginManager> taskPluginManagerMockedStatic =
|
||||||
() -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest));
|
Mockito.mockStatic(TaskPluginManager.class)) {
|
||||||
Assertions.assertEquals(Status.PROCESS_NODE_S_PARAMETER_INVALID.getCode(),
|
taskPluginManagerMockedStatic.when(() -> TaskPluginManager.checkTaskParameters(Mockito.any()))
|
||||||
((ServiceException) exception).getCode());
|
.thenReturn(false);
|
||||||
|
assertThrowsServiceException(Status.PROCESS_NODE_S_PARAMETER_INVALID,
|
||||||
|
() -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest));
|
||||||
|
}
|
||||||
|
|
||||||
// error task definition nothing update
|
try (
|
||||||
Mockito.when(processService.isTaskOnline(TASK_CODE)).thenReturn(false);
|
MockedStatic<TaskPluginManager> taskPluginManagerMockedStatic =
|
||||||
Mockito.when(taskPluginManager.checkTaskParameters(Mockito.any())).thenReturn(true);
|
Mockito.mockStatic(TaskPluginManager.class)) {
|
||||||
exception = Assertions.assertThrows(ServiceException.class,
|
taskPluginManagerMockedStatic.when(() -> TaskPluginManager.checkTaskParameters(Mockito.any()))
|
||||||
() -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest));
|
.thenReturn(true);
|
||||||
Assertions.assertEquals(Status.TASK_DEFINITION_NOT_CHANGE.getCode(), ((ServiceException) exception).getCode());
|
// error task definition nothing update
|
||||||
|
when(processService.isTaskOnline(TASK_CODE)).thenReturn(false);
|
||||||
|
assertThrowsServiceException(Status.TASK_DEFINITION_NOT_CHANGE,
|
||||||
|
() -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest));
|
||||||
|
|
||||||
// error task definition version invalid
|
// error task definition version invalid
|
||||||
taskUpdateRequest.setTaskPriority(String.valueOf(Priority.HIGH));
|
taskUpdateRequest.setTaskPriority(String.valueOf(Priority.HIGH));
|
||||||
exception = Assertions.assertThrows(ServiceException.class,
|
assertThrowsServiceException(Status.DATA_IS_NOT_VALID,
|
||||||
() -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest));
|
() -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest));
|
||||||
Assertions.assertEquals(Status.DATA_IS_NOT_VALID.getCode(), ((ServiceException) exception).getCode());
|
|
||||||
|
|
||||||
// error task definition update effect number
|
// error task definition update effect number
|
||||||
Mockito.when(taskDefinitionLogMapper.queryMaxVersionForDefinition(TASK_CODE)).thenReturn(VERSION);
|
when(taskDefinitionLogMapper.queryMaxVersionForDefinition(TASK_CODE)).thenReturn(VERSION);
|
||||||
Mockito.when(taskDefinitionMapper.updateById(isA(TaskDefinition.class))).thenReturn(0);
|
when(taskDefinitionMapper.updateById(isA(TaskDefinition.class))).thenReturn(0);
|
||||||
exception = Assertions.assertThrows(ServiceException.class,
|
assertThrowsServiceException(Status.UPDATE_TASK_DEFINITION_ERROR,
|
||||||
() -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest));
|
() -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest));
|
||||||
Assertions.assertEquals(Status.UPDATE_TASK_DEFINITION_ERROR.getCode(),
|
|
||||||
((ServiceException) exception).getCode());
|
|
||||||
|
|
||||||
// error task definition log insert
|
// error task definition log insert
|
||||||
Mockito.when(taskDefinitionMapper.updateById(isA(TaskDefinition.class))).thenReturn(1);
|
when(taskDefinitionMapper.updateById(isA(TaskDefinition.class))).thenReturn(1);
|
||||||
Mockito.when(taskDefinitionLogMapper.insert(isA(TaskDefinitionLog.class))).thenReturn(0);
|
when(taskDefinitionLogMapper.insert(isA(TaskDefinitionLog.class))).thenReturn(0);
|
||||||
exception = Assertions.assertThrows(ServiceException.class,
|
assertThrowsServiceException(Status.CREATE_TASK_DEFINITION_LOG_ERROR,
|
||||||
() -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest));
|
() -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest));
|
||||||
Assertions.assertEquals(Status.CREATE_TASK_DEFINITION_LOG_ERROR.getCode(),
|
|
||||||
((ServiceException) exception).getCode());
|
|
||||||
|
|
||||||
// success
|
// success
|
||||||
Mockito.when(taskDefinitionLogMapper.insert(isA(TaskDefinitionLog.class))).thenReturn(1);
|
when(taskDefinitionLogMapper.insert(isA(TaskDefinitionLog.class))).thenReturn(1);
|
||||||
// we do not test updateUpstreamTaskDefinition, because it should be tested in processTaskRelationService
|
// we do not test updateUpstreamTaskDefinition, because it should be tested in processTaskRelationService
|
||||||
Mockito.when(
|
when(
|
||||||
processTaskRelationService.updateUpstreamTaskDefinitionWithSyncDag(isA(User.class), isA(Long.class),
|
processTaskRelationService.updateUpstreamTaskDefinitionWithSyncDag(isA(User.class), isA(Long.class),
|
||||||
isA(Boolean.class),
|
isA(Boolean.class),
|
||||||
isA(TaskRelationUpdateUpstreamRequest.class)))
|
isA(TaskRelationUpdateUpstreamRequest.class)))
|
||||||
.thenReturn(getProcessTaskRelationList());
|
.thenReturn(getProcessTaskRelationList());
|
||||||
Assertions.assertDoesNotThrow(
|
Assertions.assertDoesNotThrow(
|
||||||
() -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest));
|
() -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest));
|
||||||
|
|
||||||
TaskDefinition taskDefinition =
|
taskDefinition =
|
||||||
taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest);
|
taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest);
|
||||||
Assertions.assertEquals(getTaskDefinition().getVersion() + 1, taskDefinition.getVersion());
|
assertEquals(getTaskDefinition().getVersion() + 1, taskDefinition.getVersion());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -549,28 +562,28 @@ public class TaskDefinitionServiceImplTest {
|
||||||
ArrayList<TaskDefinitionLog> taskDefinitionLogs = new ArrayList<>();
|
ArrayList<TaskDefinitionLog> taskDefinitionLogs = new ArrayList<>();
|
||||||
taskDefinitionLogs.add(taskDefinitionLog);
|
taskDefinitionLogs.add(taskDefinitionLog);
|
||||||
Integer version = 1;
|
Integer version = 1;
|
||||||
Mockito.when(processDefinitionMapper.queryByCode(isA(long.class))).thenReturn(processDefinition);
|
when(processDefinitionMapper.queryByCode(isA(long.class))).thenReturn(processDefinition);
|
||||||
|
|
||||||
// saveProcessDefine
|
// saveProcessDefine
|
||||||
Mockito.when(processDefineLogMapper.queryMaxVersionForDefinition(isA(long.class))).thenReturn(version);
|
when(processDefineLogMapper.queryMaxVersionForDefinition(isA(long.class))).thenReturn(version);
|
||||||
Mockito.when(processDefineLogMapper.insert(isA(ProcessDefinitionLog.class))).thenReturn(1);
|
when(processDefineLogMapper.insert(isA(ProcessDefinitionLog.class))).thenReturn(1);
|
||||||
Mockito.when(processDefinitionMapper.insert(isA(ProcessDefinitionLog.class))).thenReturn(1);
|
when(processDefinitionMapper.insert(isA(ProcessDefinitionLog.class))).thenReturn(1);
|
||||||
int insertVersion =
|
int insertVersion =
|
||||||
processServiceImpl.saveProcessDefine(loginUser, processDefinition, Boolean.TRUE, Boolean.TRUE);
|
processServiceImpl.saveProcessDefine(loginUser, processDefinition, Boolean.TRUE, Boolean.TRUE);
|
||||||
Mockito.when(processService.saveProcessDefine(loginUser, processDefinition, Boolean.TRUE, Boolean.TRUE))
|
when(processService.saveProcessDefine(loginUser, processDefinition, Boolean.TRUE, Boolean.TRUE))
|
||||||
.thenReturn(insertVersion);
|
.thenReturn(insertVersion);
|
||||||
Assertions.assertEquals(insertVersion, version + 1);
|
assertEquals(insertVersion, version + 1);
|
||||||
|
|
||||||
// saveTaskRelation
|
// saveTaskRelation
|
||||||
List<ProcessTaskRelationLog> processTaskRelationLogList = getProcessTaskRelationLogList();
|
List<ProcessTaskRelationLog> processTaskRelationLogList = getProcessTaskRelationLogList();
|
||||||
Mockito.when(processTaskRelationMapper.queryByProcessCode(eq(processDefinition.getCode())))
|
when(processTaskRelationMapper.queryByProcessCode(eq(processDefinition.getCode())))
|
||||||
.thenReturn(processTaskRelationList);
|
.thenReturn(processTaskRelationList);
|
||||||
Mockito.when(processTaskRelationMapper.batchInsert(isA(List.class))).thenReturn(1);
|
when(processTaskRelationMapper.batchInsert(isA(List.class))).thenReturn(1);
|
||||||
Mockito.when(processTaskRelationLogMapper.batchInsert(isA(List.class))).thenReturn(1);
|
when(processTaskRelationLogMapper.batchInsert(isA(List.class))).thenReturn(1);
|
||||||
int insertResult = processServiceImpl.saveTaskRelation(loginUser, processDefinition.getProjectCode(),
|
int insertResult = processServiceImpl.saveTaskRelation(loginUser, processDefinition.getProjectCode(),
|
||||||
processDefinition.getCode(), insertVersion, processTaskRelationLogList, taskDefinitionLogs,
|
processDefinition.getCode(), insertVersion, processTaskRelationLogList, taskDefinitionLogs,
|
||||||
Boolean.TRUE);
|
Boolean.TRUE);
|
||||||
Assertions.assertEquals(Constants.EXIT_CODE_SUCCESS, insertResult);
|
assertEquals(Constants.EXIT_CODE_SUCCESS, insertResult);
|
||||||
Assertions.assertDoesNotThrow(
|
Assertions.assertDoesNotThrow(
|
||||||
() -> taskDefinitionService.updateDag(loginUser, processDefinition.getCode(), processTaskRelationList,
|
() -> taskDefinitionService.updateDag(loginUser, processDefinition.getCode(), processTaskRelationList,
|
||||||
taskDefinitionLogs));
|
taskDefinitionLogs));
|
||||||
|
|
@ -581,55 +594,60 @@ public class TaskDefinitionServiceImplTest {
|
||||||
// error task definition not exists
|
// error task definition not exists
|
||||||
exception = Assertions.assertThrows(ServiceException.class,
|
exception = Assertions.assertThrows(ServiceException.class,
|
||||||
() -> taskDefinitionService.getTaskDefinition(user, TASK_CODE));
|
() -> taskDefinitionService.getTaskDefinition(user, TASK_CODE));
|
||||||
Assertions.assertEquals(Status.TASK_DEFINE_NOT_EXIST.getCode(), ((ServiceException) exception).getCode());
|
assertEquals(Status.TASK_DEFINE_NOT_EXIST.getCode(), ((ServiceException) exception).getCode());
|
||||||
|
|
||||||
// error task definition not exists
|
// error task definition not exists
|
||||||
Mockito.when(taskDefinitionMapper.queryByCode(TASK_CODE)).thenReturn(getTaskDefinition());
|
when(taskDefinitionMapper.queryByCode(TASK_CODE)).thenReturn(getTaskDefinition());
|
||||||
Mockito.when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(getProject());
|
when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(getProject());
|
||||||
Mockito.doThrow(new ServiceException(Status.USER_NO_OPERATION_PROJECT_PERM)).when(projectService)
|
doThrow(new ServiceException(Status.USER_NO_OPERATION_PROJECT_PERM)).when(projectService)
|
||||||
.checkProjectAndAuthThrowException(user, getProject(), TASK_DEFINITION);
|
.checkProjectAndAuthThrowException(user, getProject(), TASK_DEFINITION);
|
||||||
exception = Assertions.assertThrows(ServiceException.class,
|
exception = Assertions.assertThrows(ServiceException.class,
|
||||||
() -> taskDefinitionService.getTaskDefinition(user, TASK_CODE));
|
() -> taskDefinitionService.getTaskDefinition(user, TASK_CODE));
|
||||||
Assertions.assertEquals(Status.USER_NO_OPERATION_PROJECT_PERM.getCode(),
|
assertEquals(Status.USER_NO_OPERATION_PROJECT_PERM.getCode(),
|
||||||
((ServiceException) exception).getCode());
|
((ServiceException) exception).getCode());
|
||||||
|
|
||||||
// success
|
// success
|
||||||
Mockito.doNothing().when(projectService).checkProjectAndAuthThrowException(user, getProject(), TASK_DEFINITION);
|
doNothing().when(projectService).checkProjectAndAuthThrowException(user, getProject(), TASK_DEFINITION);
|
||||||
Assertions.assertDoesNotThrow(() -> taskDefinitionService.getTaskDefinition(user, TASK_CODE));
|
Assertions.assertDoesNotThrow(() -> taskDefinitionService.getTaskDefinition(user, TASK_CODE));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUpdateTaskWithUpstream() {
|
public void testUpdateTaskWithUpstream() {
|
||||||
|
try (
|
||||||
|
MockedStatic<TaskPluginManager> taskPluginManagerMockedStatic =
|
||||||
|
Mockito.mockStatic(TaskPluginManager.class)) {
|
||||||
|
taskPluginManagerMockedStatic.when(() -> TaskPluginManager.checkTaskParameters(Mockito.any()))
|
||||||
|
.thenReturn(true);
|
||||||
|
String taskDefinitionJson = getTaskDefinitionJson();
|
||||||
|
TaskDefinition taskDefinition = getTaskDefinition();
|
||||||
|
taskDefinition.setFlag(Flag.NO);
|
||||||
|
TaskDefinition taskDefinitionSecond = getTaskDefinition();
|
||||||
|
taskDefinitionSecond.setCode(5);
|
||||||
|
|
||||||
String taskDefinitionJson = getTaskDefinitionJson();
|
user.setUserType(UserType.ADMIN_USER);
|
||||||
TaskDefinition taskDefinition = getTaskDefinition();
|
when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(getProject());
|
||||||
taskDefinition.setFlag(Flag.NO);
|
when(projectService.hasProjectAndWritePerm(user, getProject(), new HashMap<>())).thenReturn(true);
|
||||||
TaskDefinition taskDefinitionSecond = getTaskDefinition();
|
when(taskDefinitionMapper.queryByCode(TASK_CODE)).thenReturn(taskDefinition);
|
||||||
taskDefinitionSecond.setCode(5);
|
when(taskDefinitionLogMapper.queryMaxVersionForDefinition(TASK_CODE)).thenReturn(1);
|
||||||
|
when(taskDefinitionMapper.updateById(Mockito.any())).thenReturn(1);
|
||||||
|
when(taskDefinitionLogMapper.insert(Mockito.any())).thenReturn(1);
|
||||||
|
|
||||||
user.setUserType(UserType.ADMIN_USER);
|
when(taskDefinitionMapper.queryByCodeList(Mockito.anySet()))
|
||||||
Mockito.when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(getProject());
|
.thenReturn(Arrays.asList(taskDefinition, taskDefinitionSecond));
|
||||||
Mockito.when(projectService.hasProjectAndWritePerm(user, getProject(), new HashMap<>())).thenReturn(true);
|
|
||||||
Mockito.when(taskDefinitionMapper.queryByCode(TASK_CODE)).thenReturn(taskDefinition);
|
|
||||||
Mockito.when(taskPluginManager.checkTaskParameters(Mockito.any())).thenReturn(true);
|
|
||||||
Mockito.when(taskDefinitionLogMapper.queryMaxVersionForDefinition(TASK_CODE)).thenReturn(1);
|
|
||||||
Mockito.when(taskDefinitionMapper.updateById(Mockito.any())).thenReturn(1);
|
|
||||||
Mockito.when(taskDefinitionLogMapper.insert(Mockito.any())).thenReturn(1);
|
|
||||||
|
|
||||||
Mockito.when(taskDefinitionMapper.queryByCodeList(Mockito.anySet()))
|
when(processTaskRelationMapper.queryUpstreamByCode(PROJECT_CODE, TASK_CODE))
|
||||||
.thenReturn(Arrays.asList(taskDefinition, taskDefinitionSecond));
|
.thenReturn(getProcessTaskRelationListV2());
|
||||||
|
when(processDefinitionMapper.queryByCode(PROCESS_DEFINITION_CODE))
|
||||||
Mockito.when(processTaskRelationMapper.queryUpstreamByCode(PROJECT_CODE, TASK_CODE))
|
.thenReturn(getProcessDefinition());
|
||||||
.thenReturn(getProcessTaskRelationListV2());
|
when(processTaskRelationMapper.batchInsert(Mockito.anyList())).thenReturn(1);
|
||||||
Mockito.when(processDefinitionMapper.queryByCode(PROCESS_DEFINITION_CODE)).thenReturn(getProcessDefinition());
|
when(processTaskRelationMapper.updateById(Mockito.any())).thenReturn(1);
|
||||||
Mockito.when(processTaskRelationMapper.batchInsert(Mockito.anyList())).thenReturn(1);
|
when(processTaskRelationLogDao.batchInsert(Mockito.anyList())).thenReturn(2);
|
||||||
Mockito.when(processTaskRelationMapper.updateById(Mockito.any())).thenReturn(1);
|
// success
|
||||||
Mockito.when(processTaskRelationLogDao.batchInsert(Mockito.anyList())).thenReturn(2);
|
Map<String, Object> successMap = taskDefinitionService.updateTaskWithUpstream(user, PROJECT_CODE, TASK_CODE,
|
||||||
// success
|
taskDefinitionJson, UPSTREAM_CODE);
|
||||||
Map<String, Object> successMap = taskDefinitionService.updateTaskWithUpstream(user, PROJECT_CODE, TASK_CODE,
|
assertEquals(Status.SUCCESS, successMap.get(Constants.STATUS));
|
||||||
taskDefinitionJson, UPSTREAM_CODE);
|
user.setUserType(UserType.GENERAL_USER);
|
||||||
Assertions.assertEquals(Status.SUCCESS, successMap.get(Constants.STATUS));
|
}
|
||||||
user.setUserType(UserType.GENERAL_USER);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getTaskDefinitionJson() {
|
private String getTaskDefinitionJson() {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
~ Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
~ contributor license agreements. See the NOTICE file distributed with
|
||||||
|
~ this work for additional information regarding copyright ownership.
|
||||||
|
~ The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
~ (the "License"); you may not use this file except in compliance with
|
||||||
|
~ the License. You may obtain a copy of the License at
|
||||||
|
~
|
||||||
|
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~
|
||||||
|
~ Unless required by applicable law or agreed to in writing, software
|
||||||
|
~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
~ See the License for the specific language governing permissions and
|
||||||
|
~ limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<configuration scan="true" scanPeriod="120 seconds">
|
||||||
|
<property name="log.base" value="logs"/>
|
||||||
|
<property scope="context" name="log.base.ctx" value="${log.base}" />
|
||||||
|
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>
|
||||||
|
[%level] %date{yyyy-MM-dd HH:mm:ss.SSS Z} %logger{10}:[%line] - %msg%n
|
||||||
|
</pattern>
|
||||||
|
<charset>UTF-8</charset>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<appender name="APILOGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
|
<file>${log.base}/dolphinscheduler-api.log</file>
|
||||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||||
|
<fileNamePattern>${log.base}/dolphinscheduler-api.%d{yyyy-MM-dd_HH}.%i.log</fileNamePattern>
|
||||||
|
<maxHistory>168</maxHistory>
|
||||||
|
<maxFileSize>64MB</maxFileSize>
|
||||||
|
<totalSizeCap>50GB</totalSizeCap>
|
||||||
|
<cleanHistoryOnStart>true</cleanHistoryOnStart>
|
||||||
|
</rollingPolicy>
|
||||||
|
<encoder>
|
||||||
|
<pattern>
|
||||||
|
[%level] %date{yyyy-MM-dd HH:mm:ss.SSS Z} %logger{10}:[%line] - %msg%n
|
||||||
|
</pattern>
|
||||||
|
<charset>UTF-8</charset>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<logger name="org.apache.zookeeper" level="WARN"/>
|
||||||
|
<logger name="org.apache.hbase" level="WARN"/>
|
||||||
|
<logger name="org.apache.hadoop" level="WARN"/>
|
||||||
|
|
||||||
|
<root level="ERROR">
|
||||||
|
<appender-ref ref="STDOUT"/>
|
||||||
|
<appender-ref ref="APILOGFILE"/>
|
||||||
|
</root>
|
||||||
|
</configuration>
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.dolphinscheduler.common;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@ComponentScan("org.apache.dolphinscheduler.common")
|
||||||
|
public class CommonConfiguration {
|
||||||
|
}
|
||||||
|
|
@ -40,7 +40,6 @@ public class RemoteLogUtils {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private RemoteLogService autowiredRemoteLogService;
|
private RemoteLogService autowiredRemoteLogService;
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
private void init() {
|
private void init() {
|
||||||
remoteLogService = autowiredRemoteLogService;
|
remoteLogService = autowiredRemoteLogService;
|
||||||
|
|
|
||||||
|
|
@ -1,124 +0,0 @@
|
||||||
/*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
|
||||||
* this work for additional information regarding copyright ownership.
|
|
||||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
||||||
* (the "License"); you may not use this file except in compliance with
|
|
||||||
* the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.apache.dolphinscheduler.common.process;
|
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.common.enums.HttpParametersType;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
public class HttpProperty {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* key
|
|
||||||
*/
|
|
||||||
private String prop;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* httpParametersType
|
|
||||||
*/
|
|
||||||
private HttpParametersType httpParametersType;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* value
|
|
||||||
*/
|
|
||||||
private String value;
|
|
||||||
|
|
||||||
public HttpProperty() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public HttpProperty(String prop, HttpParametersType httpParametersType, String value) {
|
|
||||||
this.prop = prop;
|
|
||||||
this.httpParametersType = httpParametersType;
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* getter method
|
|
||||||
*
|
|
||||||
* @return the prop
|
|
||||||
* @see HttpProperty#prop
|
|
||||||
*/
|
|
||||||
public String getProp() {
|
|
||||||
return prop;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* setter method
|
|
||||||
*
|
|
||||||
* @param prop the prop to set
|
|
||||||
* @see HttpProperty#prop
|
|
||||||
*/
|
|
||||||
public void setProp(String prop) {
|
|
||||||
this.prop = prop;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* getter method
|
|
||||||
*
|
|
||||||
* @return the value
|
|
||||||
* @see HttpProperty#value
|
|
||||||
*/
|
|
||||||
public String getValue() {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* setter method
|
|
||||||
*
|
|
||||||
* @param value the value to set
|
|
||||||
* @see HttpProperty#value
|
|
||||||
*/
|
|
||||||
public void setValue(String value) {
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public HttpParametersType getHttpParametersType() {
|
|
||||||
return httpParametersType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHttpParametersType(HttpParametersType httpParametersType) {
|
|
||||||
this.httpParametersType = httpParametersType;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (this == o) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (o == null || getClass() != o.getClass()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
HttpProperty property = (HttpProperty) o;
|
|
||||||
return Objects.equals(prop, property.prop)
|
|
||||||
&& Objects.equals(value, property.value);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return Objects.hash(prop, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "HttpProperty{"
|
|
||||||
+ "prop='" + prop + '\''
|
|
||||||
+ ", httpParametersType=" + httpParametersType
|
|
||||||
+ ", value='" + value + '\''
|
|
||||||
+ '}';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.dolphinscheduler.dao.plugin.api;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Condition;
|
||||||
|
import org.springframework.context.annotation.ConditionContext;
|
||||||
|
import org.springframework.core.type.AnnotatedTypeMetadata;
|
||||||
|
|
||||||
|
public class DatabaseEnvironmentCondition implements Condition {
|
||||||
|
|
||||||
|
private final String profile;
|
||||||
|
|
||||||
|
public DatabaseEnvironmentCondition(String profile) {
|
||||||
|
this.profile = profile;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
|
||||||
|
String[] activeProfiles = context.getEnvironment().getActiveProfiles();
|
||||||
|
return Arrays.asList(activeProfiles).contains(profile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -29,14 +29,14 @@ import org.apache.dolphinscheduler.dao.plugin.h2.monitor.H2Monitor;
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Conditional;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.context.annotation.Profile;
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.DbType;
|
import com.baomidou.mybatisplus.annotation.DbType;
|
||||||
|
|
||||||
@Profile("h2")
|
@Conditional(H2DatabaseEnvironmentCondition.class)
|
||||||
@Configuration
|
@Configuration(proxyBeanMethods = false)
|
||||||
public class H2DaoPluginConfiguration implements DaoPluginConfiguration {
|
public class H2DaoPluginAutoConfiguration implements DaoPluginConfiguration {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private DataSource dataSource;
|
private DataSource dataSource;
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.dolphinscheduler.dao.plugin.h2;
|
||||||
|
|
||||||
|
import org.apache.dolphinscheduler.dao.plugin.api.DatabaseEnvironmentCondition;
|
||||||
|
|
||||||
|
public class H2DatabaseEnvironmentCondition extends DatabaseEnvironmentCondition {
|
||||||
|
|
||||||
|
public H2DatabaseEnvironmentCondition() {
|
||||||
|
super("h2");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
#
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
# contributor license agreements. See the NOTICE file distributed with
|
||||||
|
# this work for additional information regarding copyright ownership.
|
||||||
|
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
# (the "License"); you may not use this file except in compliance with
|
||||||
|
# the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
|
||||||
|
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||||
|
org.apache.dolphinscheduler.dao.plugin.h2.H2DaoPluginAutoConfiguration
|
||||||
|
|
@ -28,14 +28,14 @@ import org.apache.dolphinscheduler.dao.plugin.mysql.monitor.MysqlMonitor;
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Conditional;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.context.annotation.Profile;
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.DbType;
|
import com.baomidou.mybatisplus.annotation.DbType;
|
||||||
|
|
||||||
@Profile("mysql")
|
@Configuration(proxyBeanMethods = false)
|
||||||
@Configuration
|
@Conditional(MysqlDatabaseEnvironmentCondition.class)
|
||||||
public class MysqlDaoPluginConfiguration implements DaoPluginConfiguration {
|
public class MysqlDaoPluginAutoConfiguration implements DaoPluginConfiguration {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private DataSource dataSource;
|
private DataSource dataSource;
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.dolphinscheduler.dao.plugin.mysql;
|
||||||
|
|
||||||
|
import org.apache.dolphinscheduler.dao.plugin.api.DatabaseEnvironmentCondition;
|
||||||
|
|
||||||
|
public class MysqlDatabaseEnvironmentCondition extends DatabaseEnvironmentCondition {
|
||||||
|
|
||||||
|
public MysqlDatabaseEnvironmentCondition() {
|
||||||
|
super("mysql");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
#
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
# contributor license agreements. See the NOTICE file distributed with
|
||||||
|
# this work for additional information regarding copyright ownership.
|
||||||
|
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
# (the "License"); you may not use this file except in compliance with
|
||||||
|
# the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
|
||||||
|
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||||
|
org.apache.dolphinscheduler.dao.plugin.mysql.MysqlDaoPluginAutoConfiguration
|
||||||
|
|
@ -29,14 +29,14 @@ import org.apache.dolphinscheduler.dao.plugin.postgresql.monitor.PostgresqlMonit
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Conditional;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.context.annotation.Profile;
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.DbType;
|
import com.baomidou.mybatisplus.annotation.DbType;
|
||||||
|
|
||||||
@Profile("postgresql")
|
@Conditional(PostgresqlDatabaseEnvironmentCondition.class)
|
||||||
@Configuration
|
@Configuration(proxyBeanMethods = false)
|
||||||
public class PostgresqlDaoPluginConfiguration implements DaoPluginConfiguration {
|
public class PostgresqlDaoPluginAutoConfiguration implements DaoPluginConfiguration {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private DataSource dataSource;
|
private DataSource dataSource;
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.dolphinscheduler.dao.plugin.postgresql;
|
||||||
|
|
||||||
|
import org.apache.dolphinscheduler.dao.plugin.api.DatabaseEnvironmentCondition;
|
||||||
|
|
||||||
|
public class PostgresqlDatabaseEnvironmentCondition extends DatabaseEnvironmentCondition {
|
||||||
|
|
||||||
|
public PostgresqlDatabaseEnvironmentCondition() {
|
||||||
|
super("postgresql");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
#
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
# contributor license agreements. See the NOTICE file distributed with
|
||||||
|
# this work for additional information regarding copyright ownership.
|
||||||
|
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
# (the "License"); you may not use this file except in compliance with
|
||||||
|
# the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
|
||||||
|
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||||
|
org.apache.dolphinscheduler.dao.plugin.postgresql.PostgresqlDaoPluginAutoConfiguration
|
||||||
|
|
@ -40,8 +40,8 @@ import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
|
@ComponentScan("org.apache.dolphinscheduler.dao")
|
||||||
@EnableAutoConfiguration
|
@EnableAutoConfiguration
|
||||||
@ComponentScan({"org.apache.dolphinscheduler.dao.plugin"})
|
|
||||||
@MapperScan(basePackages = "org.apache.dolphinscheduler.dao.mapper", sqlSessionFactoryRef = "sqlSessionFactory")
|
@MapperScan(basePackages = "org.apache.dolphinscheduler.dao.mapper", sqlSessionFactoryRef = "sqlSessionFactory")
|
||||||
public class DaoConfiguration {
|
public class DaoConfiguration {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
import org.springframework.test.annotation.Rollback;
|
import org.springframework.test.annotation.Rollback;
|
||||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
@ExtendWith(MockitoExtension.class)
|
||||||
|
|
@ -30,6 +29,5 @@ import org.springframework.transaction.annotation.Transactional;
|
||||||
@SpringBootApplication(scanBasePackageClasses = DaoConfiguration.class)
|
@SpringBootApplication(scanBasePackageClasses = DaoConfiguration.class)
|
||||||
@Transactional
|
@Transactional
|
||||||
@Rollback
|
@Rollback
|
||||||
@EnableTransactionManagement
|
|
||||||
public abstract class BaseDaoTest {
|
public abstract class BaseDaoTest {
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,6 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
import org.springframework.test.annotation.Rollback;
|
import org.springframework.test.annotation.Rollback;
|
||||||
import org.springframework.test.context.ActiveProfiles;
|
import org.springframework.test.context.ActiveProfiles;
|
||||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
@ActiveProfiles(ProfileType.H2)
|
@ActiveProfiles(ProfileType.H2)
|
||||||
|
|
@ -43,7 +42,6 @@ import org.springframework.transaction.annotation.Transactional;
|
||||||
@SpringBootTest(classes = DaoConfiguration.class)
|
@SpringBootTest(classes = DaoConfiguration.class)
|
||||||
@Transactional
|
@Transactional
|
||||||
@Rollback
|
@Rollback
|
||||||
@EnableTransactionManagement
|
|
||||||
public class AlertDaoTest {
|
public class AlertDaoTest {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|
|
||||||
|
|
@ -17,15 +17,18 @@
|
||||||
|
|
||||||
package org.apache.dolphinscheduler.server.master;
|
package org.apache.dolphinscheduler.server.master;
|
||||||
|
|
||||||
|
import org.apache.dolphinscheduler.common.CommonConfiguration;
|
||||||
import org.apache.dolphinscheduler.common.IStoppable;
|
import org.apache.dolphinscheduler.common.IStoppable;
|
||||||
import org.apache.dolphinscheduler.common.constants.Constants;
|
import org.apache.dolphinscheduler.common.constants.Constants;
|
||||||
import org.apache.dolphinscheduler.common.lifecycle.ServerLifeCycleManager;
|
import org.apache.dolphinscheduler.common.lifecycle.ServerLifeCycleManager;
|
||||||
import org.apache.dolphinscheduler.common.thread.DefaultUncaughtExceptionHandler;
|
import org.apache.dolphinscheduler.common.thread.DefaultUncaughtExceptionHandler;
|
||||||
import org.apache.dolphinscheduler.common.thread.ThreadUtils;
|
import org.apache.dolphinscheduler.common.thread.ThreadUtils;
|
||||||
|
import org.apache.dolphinscheduler.dao.DaoConfiguration;
|
||||||
import org.apache.dolphinscheduler.meter.metrics.MetricsProvider;
|
import org.apache.dolphinscheduler.meter.metrics.MetricsProvider;
|
||||||
import org.apache.dolphinscheduler.meter.metrics.SystemMetrics;
|
import org.apache.dolphinscheduler.meter.metrics.SystemMetrics;
|
||||||
import org.apache.dolphinscheduler.plugin.registry.jdbc.JdbcRegistryAutoConfiguration;
|
import org.apache.dolphinscheduler.plugin.storage.api.StorageConfiguration;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager;
|
import org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager;
|
||||||
|
import org.apache.dolphinscheduler.registry.api.RegistryConfiguration;
|
||||||
import org.apache.dolphinscheduler.scheduler.api.SchedulerApi;
|
import org.apache.dolphinscheduler.scheduler.api.SchedulerApi;
|
||||||
import org.apache.dolphinscheduler.server.master.metrics.MasterServerMetrics;
|
import org.apache.dolphinscheduler.server.master.metrics.MasterServerMetrics;
|
||||||
import org.apache.dolphinscheduler.server.master.registry.MasterRegistryClient;
|
import org.apache.dolphinscheduler.server.master.registry.MasterRegistryClient;
|
||||||
|
|
@ -35,6 +38,7 @@ import org.apache.dolphinscheduler.server.master.runner.EventExecuteService;
|
||||||
import org.apache.dolphinscheduler.server.master.runner.FailoverExecuteThread;
|
import org.apache.dolphinscheduler.server.master.runner.FailoverExecuteThread;
|
||||||
import org.apache.dolphinscheduler.server.master.runner.MasterSchedulerBootstrap;
|
import org.apache.dolphinscheduler.server.master.runner.MasterSchedulerBootstrap;
|
||||||
import org.apache.dolphinscheduler.server.master.runner.taskgroup.TaskGroupCoordinator;
|
import org.apache.dolphinscheduler.server.master.runner.taskgroup.TaskGroupCoordinator;
|
||||||
|
import org.apache.dolphinscheduler.service.ServiceConfiguration;
|
||||||
import org.apache.dolphinscheduler.service.bean.SpringApplicationContext;
|
import org.apache.dolphinscheduler.service.bean.SpringApplicationContext;
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
|
|
@ -45,18 +49,15 @@ import org.quartz.SchedulerException;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.cache.annotation.EnableCaching;
|
import org.springframework.context.annotation.Import;
|
||||||
import org.springframework.context.annotation.ComponentScan;
|
|
||||||
import org.springframework.context.annotation.FilterType;
|
|
||||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
|
||||||
|
|
||||||
@SpringBootApplication
|
|
||||||
@ComponentScan(value = "org.apache.dolphinscheduler", excludeFilters = {
|
|
||||||
@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = JdbcRegistryAutoConfiguration.class)
|
|
||||||
})
|
|
||||||
@EnableTransactionManagement
|
|
||||||
@EnableCaching
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
@Import({DaoConfiguration.class,
|
||||||
|
ServiceConfiguration.class,
|
||||||
|
CommonConfiguration.class,
|
||||||
|
StorageConfiguration.class,
|
||||||
|
RegistryConfiguration.class})
|
||||||
|
@SpringBootApplication
|
||||||
public class MasterServer implements IStoppable {
|
public class MasterServer implements IStoppable {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|
@ -65,9 +66,6 @@ public class MasterServer implements IStoppable {
|
||||||
@Autowired
|
@Autowired
|
||||||
private MasterRegistryClient masterRegistryClient;
|
private MasterRegistryClient masterRegistryClient;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private TaskPluginManager taskPluginManager;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private MasterSchedulerBootstrap masterSchedulerBootstrap;
|
private MasterSchedulerBootstrap masterSchedulerBootstrap;
|
||||||
|
|
||||||
|
|
@ -109,7 +107,7 @@ public class MasterServer implements IStoppable {
|
||||||
this.masterRPCServer.start();
|
this.masterRPCServer.start();
|
||||||
|
|
||||||
// install task plugin
|
// install task plugin
|
||||||
this.taskPluginManager.loadPlugin();
|
TaskPluginManager.loadPlugin();
|
||||||
|
|
||||||
this.masterSlotManager.start();
|
this.masterSlotManager.start();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -90,9 +90,6 @@ public class TaskExecutionContextFactory {
|
||||||
@Autowired
|
@Autowired
|
||||||
private ProcessService processService;
|
private ProcessService processService;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private TaskPluginManager taskPluginManager;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private CuringParamsService curingParamsService;
|
private CuringParamsService curingParamsService;
|
||||||
|
|
||||||
|
|
@ -106,14 +103,14 @@ public class TaskExecutionContextFactory {
|
||||||
ProcessInstance workflowInstance = taskInstance.getProcessInstance();
|
ProcessInstance workflowInstance = taskInstance.getProcessInstance();
|
||||||
|
|
||||||
ResourceParametersHelper resources =
|
ResourceParametersHelper resources =
|
||||||
Optional.ofNullable(taskPluginManager.getTaskChannel(taskInstance.getTaskType()))
|
Optional.ofNullable(TaskPluginManager.getTaskChannel(taskInstance.getTaskType()))
|
||||||
.map(taskChannel -> taskChannel.getResources(taskInstance.getTaskParams()))
|
.map(taskChannel -> taskChannel.getResources(taskInstance.getTaskParams()))
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
setTaskResourceInfo(resources);
|
setTaskResourceInfo(resources);
|
||||||
|
|
||||||
Map<String, Property> businessParamsMap = curingParamsService.preBuildBusinessParams(workflowInstance);
|
Map<String, Property> businessParamsMap = curingParamsService.preBuildBusinessParams(workflowInstance);
|
||||||
|
|
||||||
AbstractParameters baseParam = taskPluginManager.getParameters(ParametersNode.builder()
|
AbstractParameters baseParam = TaskPluginManager.getParameters(ParametersNode.builder()
|
||||||
.taskType(taskInstance.getTaskType()).taskParams(taskInstance.getTaskParams()).build());
|
.taskType(taskInstance.getTaskType()).taskParams(taskInstance.getTaskParams()).build());
|
||||||
Map<String, Property> propertyMap =
|
Map<String, Property> propertyMap =
|
||||||
curingParamsService.paramParsingPreparation(taskInstance, baseParam, workflowInstance);
|
curingParamsService.paramParsingPreparation(taskInstance, baseParam, workflowInstance);
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@
|
||||||
</encoder>
|
</encoder>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
<root level="INFO">
|
<root level="ERROR">
|
||||||
<appender-ref ref="STDOUT"/>
|
<appender-ref ref="STDOUT"/>
|
||||||
</root>
|
</root>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,8 @@
|
||||||
|
|
||||||
package org.apache.dolphinscheduler.meter;
|
package org.apache.dolphinscheduler.meter;
|
||||||
|
|
||||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
import org.apache.dolphinscheduler.meter.metrics.DefaultMetricsProvider;
|
||||||
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
@ -42,11 +43,15 @@ import io.micrometer.core.instrument.MeterRegistry;
|
||||||
* }
|
* }
|
||||||
* </pre>
|
* </pre>
|
||||||
*/
|
*/
|
||||||
@Configuration
|
@Configuration(proxyBeanMethods = false)
|
||||||
@EnableAspectJAutoProxy
|
@EnableAspectJAutoProxy
|
||||||
@EnableAutoConfiguration
|
|
||||||
@ConditionalOnProperty(prefix = "metrics", name = "enabled", havingValue = "true")
|
@ConditionalOnProperty(prefix = "metrics", name = "enabled", havingValue = "true")
|
||||||
public class MeterConfiguration {
|
public class MeterAutoConfiguration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public DefaultMetricsProvider metricsProvider(MeterRegistry meterRegistry) {
|
||||||
|
return new DefaultMetricsProvider(meterRegistry);
|
||||||
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public TimedAspect timedAspect(MeterRegistry registry) {
|
public TimedAspect timedAspect(MeterRegistry registry) {
|
||||||
|
|
@ -19,11 +19,8 @@ package org.apache.dolphinscheduler.meter.metrics;
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.common.utils.OSUtils;
|
import org.apache.dolphinscheduler.common.utils.OSUtils;
|
||||||
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import io.micrometer.core.instrument.MeterRegistry;
|
import io.micrometer.core.instrument.MeterRegistry;
|
||||||
|
|
||||||
@Component
|
|
||||||
public class DefaultMetricsProvider implements MetricsProvider {
|
public class DefaultMetricsProvider implements MetricsProvider {
|
||||||
|
|
||||||
private final MeterRegistry meterRegistry;
|
private final MeterRegistry meterRegistry;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
#
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
# contributor license agreements. See the NOTICE file distributed with
|
||||||
|
# this work for additional information regarding copyright ownership.
|
||||||
|
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
# (the "License"); you may not use this file except in compliance with
|
||||||
|
# the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
|
||||||
|
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||||
|
org.apache.dolphinscheduler.meter.MeterAutoConfiguration
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.dolphinscheduler.registry.api;
|
||||||
|
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class RegistryConfiguration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@ConditionalOnMissingBean
|
||||||
|
public RegistryClient registryClient(Registry registry) {
|
||||||
|
return new RegistryClient(registry);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -41,8 +41,6 @@ import javax.net.ssl.SSLException;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
import com.google.common.base.Splitter;
|
import com.google.common.base.Splitter;
|
||||||
|
|
@ -68,8 +66,6 @@ import io.netty.handler.ssl.SslContext;
|
||||||
* This is one of the implementation of {@link Registry}, with this implementation, you need to rely on Etcd cluster to
|
* This is one of the implementation of {@link Registry}, with this implementation, you need to rely on Etcd cluster to
|
||||||
* store the DolphinScheduler master/worker's metadata and do the server registry/unRegistry.
|
* store the DolphinScheduler master/worker's metadata and do the server registry/unRegistry.
|
||||||
*/
|
*/
|
||||||
@Component
|
|
||||||
@ConditionalOnProperty(prefix = "registry", name = "type", havingValue = "etcd")
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class EtcdRegistry implements Registry {
|
public class EtcdRegistry implements Registry {
|
||||||
|
|
||||||
|
|
@ -86,6 +82,7 @@ public class EtcdRegistry implements Registry {
|
||||||
private final Map<String, Watch.Watcher> watcherMap = new ConcurrentHashMap<>();
|
private final Map<String, Watch.Watcher> watcherMap = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
private static final long TIME_TO_LIVE_SECONDS = 30L;
|
private static final long TIME_TO_LIVE_SECONDS = 30L;
|
||||||
|
|
||||||
public EtcdRegistry(EtcdRegistryProperties registryProperties) throws SSLException {
|
public EtcdRegistry(EtcdRegistryProperties registryProperties) throws SSLException {
|
||||||
ClientBuilder clientBuilder = Client.builder()
|
ClientBuilder clientBuilder = Client.builder()
|
||||||
.endpoints(Util.toURIs(Splitter.on(",").trimResults().splitToList(registryProperties.getEndpoints())))
|
.endpoints(Util.toURIs(Splitter.on(",").trimResults().splitToList(registryProperties.getEndpoints())))
|
||||||
|
|
@ -141,8 +138,7 @@ public class EtcdRegistry implements Registry {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* @param path The prefix of the key being listened to
|
||||||
* @param path The prefix of the key being listened to
|
|
||||||
* @param listener
|
* @param listener
|
||||||
* @return if subcribe Returns true if no exception was thrown
|
* @return if subcribe Returns true if no exception was thrown
|
||||||
*/
|
*/
|
||||||
|
|
@ -165,8 +161,8 @@ public class EtcdRegistry implements Registry {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws throws an exception if the unsubscribe path does not exist
|
|
||||||
* @param path The prefix of the key being listened to
|
* @param path The prefix of the key being listened to
|
||||||
|
* @throws throws an exception if the unsubscribe path does not exist
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void unsubscribe(String path) {
|
public void unsubscribe(String path) {
|
||||||
|
|
@ -184,7 +180,6 @@ public class EtcdRegistry implements Registry {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @return Returns the value corresponding to the key
|
* @return Returns the value corresponding to the key
|
||||||
* @throws throws an exception if the key does not exist
|
* @throws throws an exception if the key does not exist
|
||||||
*/
|
*/
|
||||||
|
|
@ -202,7 +197,6 @@ public class EtcdRegistry implements Registry {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @param deleteOnDisconnect Does the put data disappear when the client disconnects
|
* @param deleteOnDisconnect Does the put data disappear when the client disconnects
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.dolphinscheduler.plugin.registry.etcd;
|
||||||
|
|
||||||
|
import org.apache.dolphinscheduler.registry.api.Registry;
|
||||||
|
|
||||||
|
import javax.net.ssl.SSLException;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@ComponentScan
|
||||||
|
@Configuration(proxyBeanMethods = false)
|
||||||
|
@ConditionalOnProperty(prefix = "registry", name = "type", havingValue = "etcd")
|
||||||
|
public class EtcdRegistryAutoConfiguration {
|
||||||
|
|
||||||
|
public EtcdRegistryAutoConfiguration() {
|
||||||
|
log.info("Load EtcdRegistryAutoConfiguration");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@ConditionalOnMissingBean(value = Registry.class)
|
||||||
|
public EtcdRegistry etcdRegistry(EtcdRegistryProperties etcdRegistryProperties) throws SSLException {
|
||||||
|
return new EtcdRegistry(etcdRegistryProperties);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -21,13 +21,11 @@ import java.time.Duration;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Configuration
|
@Configuration
|
||||||
@ConditionalOnProperty(prefix = "registry", name = "type", havingValue = "etcd")
|
|
||||||
@ConfigurationProperties(prefix = "registry")
|
@ConfigurationProperties(prefix = "registry")
|
||||||
public class EtcdRegistryProperties {
|
public class EtcdRegistryProperties {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
#
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
# contributor license agreements. See the NOTICE file distributed with
|
||||||
|
# this work for additional information regarding copyright ownership.
|
||||||
|
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
# (the "License"); you may not use this file except in compliance with
|
||||||
|
# the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
|
||||||
|
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||||
|
org.apache.dolphinscheduler.plugin.registry.etcd.EtcdRegistryAutoConfiguration
|
||||||
|
|
@ -30,6 +30,7 @@ import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
|
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
|
||||||
|
|
@ -37,6 +38,7 @@ import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
|
||||||
import com.zaxxer.hikari.HikariDataSource;
|
import com.zaxxer.hikari.HikariDataSource;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
@ComponentScan
|
||||||
@Configuration(proxyBeanMethods = false)
|
@Configuration(proxyBeanMethods = false)
|
||||||
@MapperScan("org.apache.dolphinscheduler.plugin.registry.jdbc.mapper")
|
@MapperScan("org.apache.dolphinscheduler.plugin.registry.jdbc.mapper")
|
||||||
@ConditionalOnProperty(prefix = "registry", name = "type", havingValue = "jdbc")
|
@ConditionalOnProperty(prefix = "registry", name = "type", havingValue = "jdbc")
|
||||||
|
|
|
||||||
|
|
@ -50,14 +50,11 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
|
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import com.google.common.base.Strings;
|
import com.google.common.base.Strings;
|
||||||
|
|
||||||
@Component
|
@Slf4j
|
||||||
@ConditionalOnProperty(prefix = "registry", name = "type", havingValue = "zookeeper")
|
|
||||||
public final class ZookeeperRegistry implements Registry {
|
public final class ZookeeperRegistry implements Registry {
|
||||||
|
|
||||||
private final ZookeeperRegistryProperties.ZookeeperProperties properties;
|
private final ZookeeperRegistryProperties.ZookeeperProperties properties;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.dolphinscheduler.plugin.registry.zookeeper;
|
||||||
|
|
||||||
|
import org.apache.dolphinscheduler.registry.api.Registry;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@ComponentScan
|
||||||
|
@Configuration(proxyBeanMethods = false)
|
||||||
|
@ConditionalOnProperty(prefix = "registry", name = "type", havingValue = "zookeeper")
|
||||||
|
public class ZookeeperRegistryAutoConfiguration {
|
||||||
|
|
||||||
|
public ZookeeperRegistryAutoConfiguration() {
|
||||||
|
log.info("Load ZookeeperRegistryAutoConfiguration");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@ConditionalOnMissingBean(value = Registry.class)
|
||||||
|
public ZookeeperRegistry zookeeperRegistry(ZookeeperRegistryProperties zookeeperRegistryProperties) {
|
||||||
|
return new ZookeeperRegistry(zookeeperRegistryProperties);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -19,25 +19,19 @@ package org.apache.dolphinscheduler.plugin.registry.zookeeper;
|
||||||
|
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import lombok.Data;
|
||||||
|
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
@Data
|
||||||
@Configuration
|
@Configuration
|
||||||
@ConditionalOnProperty(prefix = "registry", name = "type", havingValue = "zookeeper")
|
|
||||||
@ConfigurationProperties(prefix = "registry")
|
@ConfigurationProperties(prefix = "registry")
|
||||||
public class ZookeeperRegistryProperties {
|
public class ZookeeperRegistryProperties {
|
||||||
|
|
||||||
private ZookeeperProperties zookeeper = new ZookeeperProperties();
|
private ZookeeperProperties zookeeper = new ZookeeperProperties();
|
||||||
|
|
||||||
public ZookeeperProperties getZookeeper() {
|
@Data
|
||||||
return zookeeper;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setZookeeper(ZookeeperProperties zookeeper) {
|
|
||||||
this.zookeeper = zookeeper;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final class ZookeeperProperties {
|
public static final class ZookeeperProperties {
|
||||||
|
|
||||||
private String namespace;
|
private String namespace;
|
||||||
|
|
@ -48,91 +42,13 @@ public class ZookeeperRegistryProperties {
|
||||||
private Duration connectionTimeout = Duration.ofSeconds(9);
|
private Duration connectionTimeout = Duration.ofSeconds(9);
|
||||||
private Duration blockUntilConnected = Duration.ofMillis(600);
|
private Duration blockUntilConnected = Duration.ofMillis(600);
|
||||||
|
|
||||||
public String getNamespace() {
|
@Data
|
||||||
return namespace;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setNamespace(String namespace) {
|
|
||||||
this.namespace = namespace;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getConnectString() {
|
|
||||||
return connectString;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setConnectString(String connectString) {
|
|
||||||
this.connectString = connectString;
|
|
||||||
}
|
|
||||||
|
|
||||||
public RetryPolicy getRetryPolicy() {
|
|
||||||
return retryPolicy;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRetryPolicy(RetryPolicy retryPolicy) {
|
|
||||||
this.retryPolicy = retryPolicy;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDigest() {
|
|
||||||
return digest;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDigest(String digest) {
|
|
||||||
this.digest = digest;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Duration getSessionTimeout() {
|
|
||||||
return sessionTimeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSessionTimeout(Duration sessionTimeout) {
|
|
||||||
this.sessionTimeout = sessionTimeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Duration getConnectionTimeout() {
|
|
||||||
return connectionTimeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setConnectionTimeout(Duration connectionTimeout) {
|
|
||||||
this.connectionTimeout = connectionTimeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Duration getBlockUntilConnected() {
|
|
||||||
return blockUntilConnected;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBlockUntilConnected(Duration blockUntilConnected) {
|
|
||||||
this.blockUntilConnected = blockUntilConnected;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final class RetryPolicy {
|
public static final class RetryPolicy {
|
||||||
|
|
||||||
private Duration baseSleepTime = Duration.ofMillis(60);
|
private Duration baseSleepTime = Duration.ofMillis(60);
|
||||||
private int maxRetries;
|
private int maxRetries;
|
||||||
private Duration maxSleep = Duration.ofMillis(300);
|
private Duration maxSleep = Duration.ofMillis(300);
|
||||||
|
|
||||||
public Duration getBaseSleepTime() {
|
|
||||||
return baseSleepTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBaseSleepTime(Duration baseSleepTime) {
|
|
||||||
this.baseSleepTime = baseSleepTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getMaxRetries() {
|
|
||||||
return maxRetries;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMaxRetries(int maxRetries) {
|
|
||||||
this.maxRetries = maxRetries;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Duration getMaxSleep() {
|
|
||||||
return maxSleep;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMaxSleep(Duration maxSleep) {
|
|
||||||
this.maxSleep = maxSleep;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
#
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
# contributor license agreements. See the NOTICE file distributed with
|
||||||
|
# this work for additional information regarding copyright ownership.
|
||||||
|
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
# (the "License"); you may not use this file except in compliance with
|
||||||
|
# the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
|
||||||
|
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||||
|
org.apache.dolphinscheduler.plugin.registry.zookeeper.ZookeeperRegistryAutoConfiguration
|
||||||
|
|
@ -28,7 +28,7 @@ import org.springframework.context.annotation.Bean;
|
||||||
|
|
||||||
@AutoConfiguration(after = {QuartzAutoConfiguration.class})
|
@AutoConfiguration(after = {QuartzAutoConfiguration.class})
|
||||||
@ConditionalOnClass(value = Scheduler.class)
|
@ConditionalOnClass(value = Scheduler.class)
|
||||||
public class QuartzSchedulerConfiguration {
|
public class QuartzSchedulerAutoConfiguration {
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@ConditionalOnMissingBean
|
@ConditionalOnMissingBean
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
#
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
# contributor license agreements. See the NOTICE file distributed with
|
||||||
|
# this work for additional information regarding copyright ownership.
|
||||||
|
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
# (the "License"); you may not use this file except in compliance with
|
||||||
|
# the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
|
||||||
|
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||||
|
org.apache.dolphinscheduler.scheduler.quartz.QuartzSchedulerAutoConfiguration
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.dolphinscheduler.service;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
@ComponentScan("org.apache.dolphinscheduler.service")
|
||||||
|
@Configuration
|
||||||
|
public class ServiceConfiguration {
|
||||||
|
}
|
||||||
|
|
@ -111,7 +111,6 @@ import org.apache.dolphinscheduler.extract.base.client.SingletonJdkDynamicRpcCli
|
||||||
import org.apache.dolphinscheduler.extract.common.ILogService;
|
import org.apache.dolphinscheduler.extract.common.ILogService;
|
||||||
import org.apache.dolphinscheduler.extract.master.ITaskInstanceExecutionEventListener;
|
import org.apache.dolphinscheduler.extract.master.ITaskInstanceExecutionEventListener;
|
||||||
import org.apache.dolphinscheduler.extract.master.transportor.WorkflowInstanceStateChangeEvent;
|
import org.apache.dolphinscheduler.extract.master.transportor.WorkflowInstanceStateChangeEvent;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager;
|
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.enums.Direct;
|
import org.apache.dolphinscheduler.plugin.task.api.enums.Direct;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus;
|
import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.enums.dp.DqTaskState;
|
import org.apache.dolphinscheduler.plugin.task.api.enums.dp.DqTaskState;
|
||||||
|
|
@ -262,9 +261,6 @@ public class ProcessServiceImpl implements ProcessService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private WorkFlowLineageMapper workFlowLineageMapper;
|
private WorkFlowLineageMapper workFlowLineageMapper;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private TaskPluginManager taskPluginManager;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ClusterMapper clusterMapper;
|
private ClusterMapper clusterMapper;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,108 +0,0 @@
|
||||||
/*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
|
||||||
* this work for additional information regarding copyright ownership.
|
|
||||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
||||||
* (the "License"); you may not use this file except in compliance with
|
|
||||||
* the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.apache.dolphinscheduler.service.utils;
|
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.common.constants.Constants;
|
|
||||||
import org.apache.dolphinscheduler.common.constants.DataSourceConstants;
|
|
||||||
import org.apache.dolphinscheduler.common.utils.PropertyUtils;
|
|
||||||
|
|
||||||
import org.apache.commons.codec.binary.Base64;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
|
|
||||||
import java.net.URL;
|
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* common utils
|
|
||||||
*/
|
|
||||||
@Slf4j
|
|
||||||
public class CommonUtils {
|
|
||||||
|
|
||||||
private static final Base64 BASE64 = new Base64();
|
|
||||||
|
|
||||||
protected CommonUtils() {
|
|
||||||
throw new UnsupportedOperationException("Construct CommonUtils");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return get the path of system environment variables
|
|
||||||
*/
|
|
||||||
public static String getSystemEnvPath() {
|
|
||||||
String envPath = PropertyUtils.getString(Constants.DOLPHINSCHEDULER_ENV_PATH);
|
|
||||||
if (StringUtils.isEmpty(envPath)) {
|
|
||||||
URL envDefaultPath = CommonUtils.class.getClassLoader().getResource(Constants.ENV_PATH);
|
|
||||||
|
|
||||||
if (envDefaultPath != null) {
|
|
||||||
envPath = envDefaultPath.getPath();
|
|
||||||
log.debug("env path :{}", envPath);
|
|
||||||
} else {
|
|
||||||
envPath = "/etc/profile";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return envPath;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* encode password
|
|
||||||
*/
|
|
||||||
public static String encodePassword(String password) {
|
|
||||||
if (StringUtils.isEmpty(password)) {
|
|
||||||
return StringUtils.EMPTY;
|
|
||||||
}
|
|
||||||
// if encryption is not turned on, return directly
|
|
||||||
boolean encryptionEnable = PropertyUtils.getBoolean(DataSourceConstants.DATASOURCE_ENCRYPTION_ENABLE, false);
|
|
||||||
if (!encryptionEnable) {
|
|
||||||
return password;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Using Base64 + salt to process password
|
|
||||||
String salt = PropertyUtils.getString(DataSourceConstants.DATASOURCE_ENCRYPTION_SALT,
|
|
||||||
DataSourceConstants.DATASOURCE_ENCRYPTION_SALT_DEFAULT);
|
|
||||||
String passwordWithSalt = salt + new String(BASE64.encode(password.getBytes(StandardCharsets.UTF_8)));
|
|
||||||
return new String(BASE64.encode(passwordWithSalt.getBytes(StandardCharsets.UTF_8)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* decode password
|
|
||||||
*/
|
|
||||||
public static String decodePassword(String password) {
|
|
||||||
if (StringUtils.isEmpty(password)) {
|
|
||||||
return StringUtils.EMPTY;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if encryption is not turned on, return directly
|
|
||||||
boolean encryptionEnable = PropertyUtils.getBoolean(DataSourceConstants.DATASOURCE_ENCRYPTION_ENABLE, false);
|
|
||||||
if (!encryptionEnable) {
|
|
||||||
return password;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Using Base64 + salt to process password
|
|
||||||
String salt = PropertyUtils.getString(DataSourceConstants.DATASOURCE_ENCRYPTION_SALT,
|
|
||||||
DataSourceConstants.DATASOURCE_ENCRYPTION_SALT_DEFAULT);
|
|
||||||
String passwordWithSalt = new String(BASE64.decode(password), StandardCharsets.UTF_8);
|
|
||||||
if (!passwordWithSalt.startsWith(salt)) {
|
|
||||||
log.warn("There is a password and salt mismatch: {} ", password);
|
|
||||||
return password;
|
|
||||||
}
|
|
||||||
return new String(BASE64.decode(passwordWithSalt.substring(salt.length())), StandardCharsets.UTF_8);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -79,7 +79,6 @@ import org.apache.dolphinscheduler.plugin.task.api.enums.dp.InputType;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.enums.dp.OptionSourceType;
|
import org.apache.dolphinscheduler.plugin.task.api.enums.dp.OptionSourceType;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.model.Property;
|
import org.apache.dolphinscheduler.plugin.task.api.model.Property;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.model.ResourceInfo;
|
import org.apache.dolphinscheduler.plugin.task.api.model.ResourceInfo;
|
||||||
import org.apache.dolphinscheduler.service.cron.CronUtilsTest;
|
|
||||||
import org.apache.dolphinscheduler.service.exceptions.CronParseException;
|
import org.apache.dolphinscheduler.service.exceptions.CronParseException;
|
||||||
import org.apache.dolphinscheduler.service.exceptions.ServiceException;
|
import org.apache.dolphinscheduler.service.exceptions.ServiceException;
|
||||||
import org.apache.dolphinscheduler.service.expand.CuringParamsService;
|
import org.apache.dolphinscheduler.service.expand.CuringParamsService;
|
||||||
|
|
@ -102,8 +101,6 @@ import org.mockito.Mockito;
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
import org.mockito.junit.jupiter.MockitoSettings;
|
import org.mockito.junit.jupiter.MockitoSettings;
|
||||||
import org.mockito.quality.Strictness;
|
import org.mockito.quality.Strictness;
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* process service test
|
* process service test
|
||||||
|
|
@ -112,7 +109,6 @@ import org.slf4j.LoggerFactory;
|
||||||
@MockitoSettings(strictness = Strictness.LENIENT)
|
@MockitoSettings(strictness = Strictness.LENIENT)
|
||||||
public class ProcessServiceTest {
|
public class ProcessServiceTest {
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(CronUtilsTest.class);
|
|
||||||
@InjectMocks
|
@InjectMocks
|
||||||
private ProcessServiceImpl processService;
|
private ProcessServiceImpl processService;
|
||||||
@Mock
|
@Mock
|
||||||
|
|
@ -667,7 +663,6 @@ public class ProcessServiceTest {
|
||||||
taskDefinition.setVersion(1);
|
taskDefinition.setVersion(1);
|
||||||
taskDefinition.setCreateTime(new Date());
|
taskDefinition.setCreateTime(new Date());
|
||||||
taskDefinition.setUpdateTime(new Date());
|
taskDefinition.setUpdateTime(new Date());
|
||||||
when(taskPluginManager.getParameters(any())).thenReturn(null);
|
|
||||||
when(taskDefinitionLogMapper.queryByDefinitionCodeAndVersion(taskDefinition.getCode(),
|
when(taskDefinitionLogMapper.queryByDefinitionCodeAndVersion(taskDefinition.getCode(),
|
||||||
taskDefinition.getVersion())).thenReturn(taskDefinition);
|
taskDefinition.getVersion())).thenReturn(taskDefinition);
|
||||||
when(taskDefinitionLogMapper.queryMaxVersionForDefinition(taskDefinition.getCode())).thenReturn(1);
|
when(taskDefinitionLogMapper.queryMaxVersionForDefinition(taskDefinition.getCode())).thenReturn(1);
|
||||||
|
|
|
||||||
|
|
@ -1,71 +0,0 @@
|
||||||
/*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
|
||||||
* this work for additional information regarding copyright ownership.
|
|
||||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
||||||
* (the "License"); you may not use this file except in compliance with
|
|
||||||
* the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.apache.dolphinscheduler.service.utils;
|
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.common.utils.FileUtils;
|
|
||||||
|
|
||||||
import java.net.InetAddress;
|
|
||||||
import java.net.UnknownHostException;
|
|
||||||
|
|
||||||
import org.junit.jupiter.api.Assertions;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* configuration test
|
|
||||||
*/
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
|
||||||
public class CommonUtilsTest {
|
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(CommonUtilsTest.class);
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getSystemEnvPath() {
|
|
||||||
String envPath;
|
|
||||||
envPath = CommonUtils.getSystemEnvPath();
|
|
||||||
Assertions.assertEquals("/etc/profile", envPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getDownloadFilename() {
|
|
||||||
logger.info(FileUtils.getDownloadFilename("a.txt"));
|
|
||||||
Assertions.assertTrue(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getUploadFilename() {
|
|
||||||
logger.info(FileUtils.getUploadFilename("1234", "a.txt"));
|
|
||||||
Assertions.assertTrue(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void test() {
|
|
||||||
InetAddress ip;
|
|
||||||
try {
|
|
||||||
ip = InetAddress.getLocalHost();
|
|
||||||
logger.info(ip.getHostAddress());
|
|
||||||
} catch (UnknownHostException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
Assertions.assertTrue(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -24,8 +24,8 @@ import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
@SpringBootApplication
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
@SpringBootApplication
|
||||||
public class StandaloneServer {
|
public class StandaloneServer {
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) throws Exception {
|
||||||
|
|
|
||||||
|
|
@ -329,4 +329,4 @@ spring:
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
url: jdbc:mysql://127.0.0.1:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8
|
url: jdbc:mysql://127.0.0.1:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8
|
||||||
username: root
|
username: root
|
||||||
password: root@123
|
password: root
|
||||||
|
|
|
||||||
|
|
@ -36,21 +36,18 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
@Component
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class TaskPluginManager {
|
public class TaskPluginManager {
|
||||||
|
|
||||||
private final Map<String, TaskChannelFactory> taskChannelFactoryMap = new HashMap<>();
|
private static final Map<String, TaskChannelFactory> taskChannelFactoryMap = new HashMap<>();
|
||||||
private final Map<String, TaskChannel> taskChannelMap = new HashMap<>();
|
private static final Map<String, TaskChannel> taskChannelMap = new HashMap<>();
|
||||||
|
|
||||||
private final AtomicBoolean loadedFlag = new AtomicBoolean(false);
|
private static final AtomicBoolean loadedFlag = new AtomicBoolean(false);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load task plugins from classpath.
|
* Load task plugins from classpath.
|
||||||
*/
|
*/
|
||||||
public void loadPlugin() {
|
public static void loadPlugin() {
|
||||||
if (!loadedFlag.compareAndSet(false, true)) {
|
if (!loadedFlag.compareAndSet(false, true)) {
|
||||||
log.warn("The task plugin has already been loaded");
|
log.warn("The task plugin has already been loaded");
|
||||||
return;
|
return;
|
||||||
|
|
@ -70,24 +67,24 @@ public class TaskPluginManager {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, TaskChannel> getTaskChannelMap() {
|
public static Map<String, TaskChannel> getTaskChannelMap() {
|
||||||
return Collections.unmodifiableMap(taskChannelMap);
|
return Collections.unmodifiableMap(taskChannelMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, TaskChannelFactory> getTaskChannelFactoryMap() {
|
public static Map<String, TaskChannelFactory> getTaskChannelFactoryMap() {
|
||||||
return Collections.unmodifiableMap(taskChannelFactoryMap);
|
return Collections.unmodifiableMap(taskChannelFactoryMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TaskChannel getTaskChannel(String type) {
|
public static TaskChannel getTaskChannel(String type) {
|
||||||
return this.getTaskChannelMap().get(type);
|
return getTaskChannelMap().get(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean checkTaskParameters(ParametersNode parametersNode) {
|
public static boolean checkTaskParameters(ParametersNode parametersNode) {
|
||||||
AbstractParameters abstractParameters = this.getParameters(parametersNode);
|
AbstractParameters abstractParameters = getParameters(parametersNode);
|
||||||
return abstractParameters != null && abstractParameters.checkParameters();
|
return abstractParameters != null && abstractParameters.checkParameters();
|
||||||
}
|
}
|
||||||
|
|
||||||
public AbstractParameters getParameters(ParametersNode parametersNode) {
|
public static AbstractParameters getParameters(ParametersNode parametersNode) {
|
||||||
String taskType = parametersNode.getTaskType();
|
String taskType = parametersNode.getTaskType();
|
||||||
if (Objects.isNull(taskType)) {
|
if (Objects.isNull(taskType)) {
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -106,7 +103,7 @@ public class TaskPluginManager {
|
||||||
case TaskConstants.TASK_TYPE_DYNAMIC:
|
case TaskConstants.TASK_TYPE_DYNAMIC:
|
||||||
return JSONUtils.parseObject(parametersNode.getTaskParams(), DynamicParameters.class);
|
return JSONUtils.parseObject(parametersNode.getTaskParams(), DynamicParameters.class);
|
||||||
default:
|
default:
|
||||||
TaskChannel taskChannel = this.getTaskChannelMap().get(taskType);
|
TaskChannel taskChannel = getTaskChannelMap().get(taskType);
|
||||||
if (Objects.isNull(taskChannel)) {
|
if (Objects.isNull(taskChannel)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,12 +23,12 @@ import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import org.springframework.boot.CommandLineRunner;
|
import org.springframework.boot.CommandLineRunner;
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
|
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
import org.springframework.context.annotation.Import;
|
||||||
import org.springframework.context.annotation.Profile;
|
import org.springframework.context.annotation.Profile;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@ImportAutoConfiguration(DaoConfiguration.class)
|
@Import(DaoConfiguration.class)
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
public class UpgradeDolphinScheduler {
|
public class UpgradeDolphinScheduler {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
package org.apache.dolphinscheduler.server.worker;
|
package org.apache.dolphinscheduler.server.worker;
|
||||||
|
|
||||||
|
import org.apache.dolphinscheduler.common.CommonConfiguration;
|
||||||
import org.apache.dolphinscheduler.common.IStoppable;
|
import org.apache.dolphinscheduler.common.IStoppable;
|
||||||
import org.apache.dolphinscheduler.common.constants.Constants;
|
import org.apache.dolphinscheduler.common.constants.Constants;
|
||||||
import org.apache.dolphinscheduler.common.lifecycle.ServerLifeCycleManager;
|
import org.apache.dolphinscheduler.common.lifecycle.ServerLifeCycleManager;
|
||||||
|
|
@ -24,11 +25,12 @@ import org.apache.dolphinscheduler.common.thread.DefaultUncaughtExceptionHandler
|
||||||
import org.apache.dolphinscheduler.common.thread.ThreadUtils;
|
import org.apache.dolphinscheduler.common.thread.ThreadUtils;
|
||||||
import org.apache.dolphinscheduler.meter.metrics.MetricsProvider;
|
import org.apache.dolphinscheduler.meter.metrics.MetricsProvider;
|
||||||
import org.apache.dolphinscheduler.meter.metrics.SystemMetrics;
|
import org.apache.dolphinscheduler.meter.metrics.SystemMetrics;
|
||||||
import org.apache.dolphinscheduler.plugin.registry.jdbc.JdbcRegistryAutoConfiguration;
|
import org.apache.dolphinscheduler.plugin.storage.api.StorageConfiguration;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
|
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager;
|
import org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils;
|
import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.utils.ProcessUtils;
|
import org.apache.dolphinscheduler.plugin.task.api.utils.ProcessUtils;
|
||||||
|
import org.apache.dolphinscheduler.registry.api.RegistryConfiguration;
|
||||||
import org.apache.dolphinscheduler.server.worker.message.MessageRetryRunner;
|
import org.apache.dolphinscheduler.server.worker.message.MessageRetryRunner;
|
||||||
import org.apache.dolphinscheduler.server.worker.metrics.WorkerServerMetrics;
|
import org.apache.dolphinscheduler.server.worker.metrics.WorkerServerMetrics;
|
||||||
import org.apache.dolphinscheduler.server.worker.registry.WorkerRegistryClient;
|
import org.apache.dolphinscheduler.server.worker.registry.WorkerRegistryClient;
|
||||||
|
|
@ -47,24 +49,18 @@ import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.context.annotation.ComponentScan;
|
import org.springframework.context.annotation.Import;
|
||||||
import org.springframework.context.annotation.FilterType;
|
|
||||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
|
||||||
|
|
||||||
@SpringBootApplication
|
|
||||||
@EnableTransactionManagement
|
|
||||||
@ComponentScan(value = "org.apache.dolphinscheduler", excludeFilters = {
|
|
||||||
@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = JdbcRegistryAutoConfiguration.class)
|
|
||||||
})
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
@Import({CommonConfiguration.class,
|
||||||
|
StorageConfiguration.class,
|
||||||
|
RegistryConfiguration.class})
|
||||||
|
@SpringBootApplication
|
||||||
public class WorkerServer implements IStoppable {
|
public class WorkerServer implements IStoppable {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private WorkerRegistryClient workerRegistryClient;
|
private WorkerRegistryClient workerRegistryClient;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private TaskPluginManager taskPluginManager;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private WorkerRpcServer workerRpcServer;
|
private WorkerRpcServer workerRpcServer;
|
||||||
|
|
||||||
|
|
@ -89,7 +85,7 @@ public class WorkerServer implements IStoppable {
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
public void run() {
|
public void run() {
|
||||||
this.workerRpcServer.start();
|
this.workerRpcServer.start();
|
||||||
this.taskPluginManager.loadPlugin();
|
TaskPluginManager.loadPlugin();
|
||||||
|
|
||||||
this.workerRegistryClient.setRegistryStoppable(this);
|
this.workerRegistryClient.setRegistryStoppable(this);
|
||||||
this.workerRegistryClient.start();
|
this.workerRegistryClient.start();
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@ import org.apache.dolphinscheduler.plugin.storage.api.StorageOperate;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.TaskCallBack;
|
import org.apache.dolphinscheduler.plugin.task.api.TaskCallBack;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.TaskException;
|
import org.apache.dolphinscheduler.plugin.task.api.TaskException;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
|
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager;
|
|
||||||
import org.apache.dolphinscheduler.server.worker.config.WorkerConfig;
|
import org.apache.dolphinscheduler.server.worker.config.WorkerConfig;
|
||||||
import org.apache.dolphinscheduler.server.worker.registry.WorkerRegistryClient;
|
import org.apache.dolphinscheduler.server.worker.registry.WorkerRegistryClient;
|
||||||
import org.apache.dolphinscheduler.server.worker.rpc.WorkerMessageSender;
|
import org.apache.dolphinscheduler.server.worker.rpc.WorkerMessageSender;
|
||||||
|
|
@ -35,13 +34,11 @@ public class DefaultWorkerTaskExecutor extends WorkerTaskExecutor {
|
||||||
public DefaultWorkerTaskExecutor(@NonNull TaskExecutionContext taskExecutionContext,
|
public DefaultWorkerTaskExecutor(@NonNull TaskExecutionContext taskExecutionContext,
|
||||||
@NonNull WorkerConfig workerConfig,
|
@NonNull WorkerConfig workerConfig,
|
||||||
@NonNull WorkerMessageSender workerMessageSender,
|
@NonNull WorkerMessageSender workerMessageSender,
|
||||||
@NonNull TaskPluginManager taskPluginManager,
|
|
||||||
@Nullable StorageOperate storageOperate,
|
@Nullable StorageOperate storageOperate,
|
||||||
@NonNull WorkerRegistryClient workerRegistryClient) {
|
@NonNull WorkerRegistryClient workerRegistryClient) {
|
||||||
super(taskExecutionContext,
|
super(taskExecutionContext,
|
||||||
workerConfig,
|
workerConfig,
|
||||||
workerMessageSender,
|
workerMessageSender,
|
||||||
taskPluginManager,
|
|
||||||
storageOperate,
|
storageOperate,
|
||||||
workerRegistryClient);
|
workerRegistryClient);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ package org.apache.dolphinscheduler.server.worker.runner;
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.plugin.storage.api.StorageOperate;
|
import org.apache.dolphinscheduler.plugin.storage.api.StorageOperate;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
|
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager;
|
|
||||||
import org.apache.dolphinscheduler.server.worker.config.WorkerConfig;
|
import org.apache.dolphinscheduler.server.worker.config.WorkerConfig;
|
||||||
import org.apache.dolphinscheduler.server.worker.registry.WorkerRegistryClient;
|
import org.apache.dolphinscheduler.server.worker.registry.WorkerRegistryClient;
|
||||||
import org.apache.dolphinscheduler.server.worker.rpc.WorkerMessageSender;
|
import org.apache.dolphinscheduler.server.worker.rpc.WorkerMessageSender;
|
||||||
|
|
@ -35,20 +34,17 @@ public class DefaultWorkerTaskExecutorFactory
|
||||||
private final @NonNull TaskExecutionContext taskExecutionContext;
|
private final @NonNull TaskExecutionContext taskExecutionContext;
|
||||||
private final @NonNull WorkerConfig workerConfig;
|
private final @NonNull WorkerConfig workerConfig;
|
||||||
private final @NonNull WorkerMessageSender workerMessageSender;
|
private final @NonNull WorkerMessageSender workerMessageSender;
|
||||||
private final @NonNull TaskPluginManager taskPluginManager;
|
|
||||||
private final @Nullable StorageOperate storageOperate;
|
private final @Nullable StorageOperate storageOperate;
|
||||||
private final @NonNull WorkerRegistryClient workerRegistryClient;
|
private final @NonNull WorkerRegistryClient workerRegistryClient;
|
||||||
|
|
||||||
public DefaultWorkerTaskExecutorFactory(@NonNull TaskExecutionContext taskExecutionContext,
|
public DefaultWorkerTaskExecutorFactory(@NonNull TaskExecutionContext taskExecutionContext,
|
||||||
@NonNull WorkerConfig workerConfig,
|
@NonNull WorkerConfig workerConfig,
|
||||||
@NonNull WorkerMessageSender workerMessageSender,
|
@NonNull WorkerMessageSender workerMessageSender,
|
||||||
@NonNull TaskPluginManager taskPluginManager,
|
|
||||||
@Nullable StorageOperate storageOperate,
|
@Nullable StorageOperate storageOperate,
|
||||||
@NonNull WorkerRegistryClient workerRegistryClient) {
|
@NonNull WorkerRegistryClient workerRegistryClient) {
|
||||||
this.taskExecutionContext = taskExecutionContext;
|
this.taskExecutionContext = taskExecutionContext;
|
||||||
this.workerConfig = workerConfig;
|
this.workerConfig = workerConfig;
|
||||||
this.workerMessageSender = workerMessageSender;
|
this.workerMessageSender = workerMessageSender;
|
||||||
this.taskPluginManager = taskPluginManager;
|
|
||||||
this.storageOperate = storageOperate;
|
this.storageOperate = storageOperate;
|
||||||
this.workerRegistryClient = workerRegistryClient;
|
this.workerRegistryClient = workerRegistryClient;
|
||||||
}
|
}
|
||||||
|
|
@ -59,7 +55,6 @@ public class DefaultWorkerTaskExecutorFactory
|
||||||
taskExecutionContext,
|
taskExecutionContext,
|
||||||
workerConfig,
|
workerConfig,
|
||||||
workerMessageSender,
|
workerMessageSender,
|
||||||
taskPluginManager,
|
|
||||||
storageOperate,
|
storageOperate,
|
||||||
workerRegistryClient);
|
workerRegistryClient);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,6 @@ public abstract class WorkerTaskExecutor implements Runnable {
|
||||||
protected final TaskExecutionContext taskExecutionContext;
|
protected final TaskExecutionContext taskExecutionContext;
|
||||||
protected final WorkerConfig workerConfig;
|
protected final WorkerConfig workerConfig;
|
||||||
protected final WorkerMessageSender workerMessageSender;
|
protected final WorkerMessageSender workerMessageSender;
|
||||||
protected final TaskPluginManager taskPluginManager;
|
|
||||||
protected final @Nullable StorageOperate storageOperate;
|
protected final @Nullable StorageOperate storageOperate;
|
||||||
protected final WorkerRegistryClient workerRegistryClient;
|
protected final WorkerRegistryClient workerRegistryClient;
|
||||||
|
|
||||||
|
|
@ -85,13 +84,11 @@ public abstract class WorkerTaskExecutor implements Runnable {
|
||||||
@NonNull TaskExecutionContext taskExecutionContext,
|
@NonNull TaskExecutionContext taskExecutionContext,
|
||||||
@NonNull WorkerConfig workerConfig,
|
@NonNull WorkerConfig workerConfig,
|
||||||
@NonNull WorkerMessageSender workerMessageSender,
|
@NonNull WorkerMessageSender workerMessageSender,
|
||||||
@NonNull TaskPluginManager taskPluginManager,
|
|
||||||
@Nullable StorageOperate storageOperate,
|
@Nullable StorageOperate storageOperate,
|
||||||
@NonNull WorkerRegistryClient workerRegistryClient) {
|
@NonNull WorkerRegistryClient workerRegistryClient) {
|
||||||
this.taskExecutionContext = taskExecutionContext;
|
this.taskExecutionContext = taskExecutionContext;
|
||||||
this.workerConfig = workerConfig;
|
this.workerConfig = workerConfig;
|
||||||
this.workerMessageSender = workerMessageSender;
|
this.workerMessageSender = workerMessageSender;
|
||||||
this.taskPluginManager = taskPluginManager;
|
|
||||||
this.storageOperate = storageOperate;
|
this.storageOperate = storageOperate;
|
||||||
this.workerRegistryClient = workerRegistryClient;
|
this.workerRegistryClient = workerRegistryClient;
|
||||||
SensitiveDataConverter.addMaskPattern(K8S_CONFIG_REGEX);
|
SensitiveDataConverter.addMaskPattern(K8S_CONFIG_REGEX);
|
||||||
|
|
@ -220,7 +217,7 @@ public abstract class WorkerTaskExecutor implements Runnable {
|
||||||
log.info("WorkflowInstanceExecDir: {} check successfully", taskExecutionContext.getExecutePath());
|
log.info("WorkflowInstanceExecDir: {} check successfully", taskExecutionContext.getExecutePath());
|
||||||
|
|
||||||
TaskChannel taskChannel =
|
TaskChannel taskChannel =
|
||||||
Optional.ofNullable(taskPluginManager.getTaskChannelMap().get(taskExecutionContext.getTaskType()))
|
Optional.ofNullable(TaskPluginManager.getTaskChannelMap().get(taskExecutionContext.getTaskType()))
|
||||||
.orElseThrow(() -> new TaskPluginException(taskExecutionContext.getTaskType()
|
.orElseThrow(() -> new TaskPluginException(taskExecutionContext.getTaskType()
|
||||||
+ " task plugin not found, please check the task type is correct."));
|
+ " task plugin not found, please check the task type is correct."));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ package org.apache.dolphinscheduler.server.worker.runner;
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.plugin.storage.api.StorageOperate;
|
import org.apache.dolphinscheduler.plugin.storage.api.StorageOperate;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
|
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager;
|
|
||||||
import org.apache.dolphinscheduler.server.worker.config.WorkerConfig;
|
import org.apache.dolphinscheduler.server.worker.config.WorkerConfig;
|
||||||
import org.apache.dolphinscheduler.server.worker.registry.WorkerRegistryClient;
|
import org.apache.dolphinscheduler.server.worker.registry.WorkerRegistryClient;
|
||||||
import org.apache.dolphinscheduler.server.worker.rpc.WorkerMessageSender;
|
import org.apache.dolphinscheduler.server.worker.rpc.WorkerMessageSender;
|
||||||
|
|
@ -36,12 +35,6 @@ public class WorkerTaskExecutorFactoryBuilder {
|
||||||
@Autowired
|
@Autowired
|
||||||
private WorkerMessageSender workerMessageSender;
|
private WorkerMessageSender workerMessageSender;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private TaskPluginManager taskPluginManager;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private WorkerTaskExecutorThreadPool workerManager;
|
|
||||||
|
|
||||||
@Autowired(required = false)
|
@Autowired(required = false)
|
||||||
private StorageOperate storageOperate;
|
private StorageOperate storageOperate;
|
||||||
|
|
||||||
|
|
@ -51,14 +44,11 @@ public class WorkerTaskExecutorFactoryBuilder {
|
||||||
public WorkerTaskExecutorFactoryBuilder(
|
public WorkerTaskExecutorFactoryBuilder(
|
||||||
WorkerConfig workerConfig,
|
WorkerConfig workerConfig,
|
||||||
WorkerMessageSender workerMessageSender,
|
WorkerMessageSender workerMessageSender,
|
||||||
TaskPluginManager taskPluginManager,
|
|
||||||
WorkerTaskExecutorThreadPool workerManager,
|
WorkerTaskExecutorThreadPool workerManager,
|
||||||
StorageOperate storageOperate,
|
StorageOperate storageOperate,
|
||||||
WorkerRegistryClient workerRegistryClient) {
|
WorkerRegistryClient workerRegistryClient) {
|
||||||
this.workerConfig = workerConfig;
|
this.workerConfig = workerConfig;
|
||||||
this.workerMessageSender = workerMessageSender;
|
this.workerMessageSender = workerMessageSender;
|
||||||
this.taskPluginManager = taskPluginManager;
|
|
||||||
this.workerManager = workerManager;
|
|
||||||
this.storageOperate = storageOperate;
|
this.storageOperate = storageOperate;
|
||||||
this.workerRegistryClient = workerRegistryClient;
|
this.workerRegistryClient = workerRegistryClient;
|
||||||
}
|
}
|
||||||
|
|
@ -67,7 +57,6 @@ public class WorkerTaskExecutorFactoryBuilder {
|
||||||
return new DefaultWorkerTaskExecutorFactory(taskExecutionContext,
|
return new DefaultWorkerTaskExecutorFactory(taskExecutionContext,
|
||||||
workerConfig,
|
workerConfig,
|
||||||
workerMessageSender,
|
workerMessageSender,
|
||||||
taskPluginManager,
|
|
||||||
storageOperate,
|
storageOperate,
|
||||||
workerRegistryClient);
|
workerRegistryClient);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,6 @@ package org.apache.dolphinscheduler.server.worker.runner;
|
||||||
import org.apache.dolphinscheduler.common.constants.Constants;
|
import org.apache.dolphinscheduler.common.constants.Constants;
|
||||||
import org.apache.dolphinscheduler.plugin.storage.api.StorageOperate;
|
import org.apache.dolphinscheduler.plugin.storage.api.StorageOperate;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
|
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager;
|
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus;
|
import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus;
|
||||||
import org.apache.dolphinscheduler.server.worker.config.WorkerConfig;
|
import org.apache.dolphinscheduler.server.worker.config.WorkerConfig;
|
||||||
import org.apache.dolphinscheduler.server.worker.registry.WorkerRegistryClient;
|
import org.apache.dolphinscheduler.server.worker.registry.WorkerRegistryClient;
|
||||||
|
|
@ -40,8 +39,6 @@ public class DefaultWorkerTaskExecutorTest {
|
||||||
|
|
||||||
private WorkerMessageSender workerMessageSender = Mockito.mock(WorkerMessageSender.class);
|
private WorkerMessageSender workerMessageSender = Mockito.mock(WorkerMessageSender.class);
|
||||||
|
|
||||||
private TaskPluginManager taskPluginManager = Mockito.mock(TaskPluginManager.class);
|
|
||||||
|
|
||||||
private StorageOperate storageOperate = Mockito.mock(StorageOperate.class);
|
private StorageOperate storageOperate = Mockito.mock(StorageOperate.class);
|
||||||
|
|
||||||
private WorkerRegistryClient workerRegistryClient = Mockito.mock(WorkerRegistryClient.class);
|
private WorkerRegistryClient workerRegistryClient = Mockito.mock(WorkerRegistryClient.class);
|
||||||
|
|
@ -58,7 +55,6 @@ public class DefaultWorkerTaskExecutorTest {
|
||||||
taskExecutionContext,
|
taskExecutionContext,
|
||||||
workerConfig,
|
workerConfig,
|
||||||
workerMessageSender,
|
workerMessageSender,
|
||||||
taskPluginManager,
|
|
||||||
storageOperate,
|
storageOperate,
|
||||||
workerRegistryClient);
|
workerRegistryClient);
|
||||||
|
|
||||||
|
|
@ -82,7 +78,6 @@ public class DefaultWorkerTaskExecutorTest {
|
||||||
taskExecutionContext,
|
taskExecutionContext,
|
||||||
workerConfig,
|
workerConfig,
|
||||||
workerMessageSender,
|
workerMessageSender,
|
||||||
taskPluginManager,
|
|
||||||
storageOperate,
|
storageOperate,
|
||||||
workerRegistryClient);
|
workerRegistryClient);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ import org.apache.dolphinscheduler.plugin.storage.api.StorageEntity;
|
||||||
import org.apache.dolphinscheduler.plugin.storage.api.StorageOperate;
|
import org.apache.dolphinscheduler.plugin.storage.api.StorageOperate;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.TaskCallBack;
|
import org.apache.dolphinscheduler.plugin.task.api.TaskCallBack;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
|
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager;
|
|
||||||
import org.apache.dolphinscheduler.server.worker.config.TaskExecuteThreadsFullPolicy;
|
import org.apache.dolphinscheduler.server.worker.config.TaskExecuteThreadsFullPolicy;
|
||||||
import org.apache.dolphinscheduler.server.worker.config.WorkerConfig;
|
import org.apache.dolphinscheduler.server.worker.config.WorkerConfig;
|
||||||
import org.apache.dolphinscheduler.server.worker.registry.WorkerRegistryClient;
|
import org.apache.dolphinscheduler.server.worker.registry.WorkerRegistryClient;
|
||||||
|
|
@ -68,7 +67,7 @@ class WorkerTaskExecutorThreadPoolTest {
|
||||||
|
|
||||||
protected MockWorkerTaskExecutor(Runnable runnable) {
|
protected MockWorkerTaskExecutor(Runnable runnable) {
|
||||||
super(TaskExecutionContext.builder().taskInstanceId((int) System.nanoTime()).build(), new WorkerConfig(),
|
super(TaskExecutionContext.builder().taskInstanceId((int) System.nanoTime()).build(), new WorkerConfig(),
|
||||||
new WorkerMessageSender(), new TaskPluginManager(), new StorageOperate() {
|
new WorkerMessageSender(), new StorageOperate() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createTenantDirIfNotExists(String tenantCode) {
|
public void createTenantDirIfNotExists(String tenantCode) {
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,6 @@ import org.apache.dolphinscheduler.extract.worker.transportor.UpdateWorkflowHost
|
||||||
import org.apache.dolphinscheduler.plugin.storage.api.StorageOperate;
|
import org.apache.dolphinscheduler.plugin.storage.api.StorageOperate;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.AbstractTask;
|
import org.apache.dolphinscheduler.plugin.task.api.AbstractTask;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
|
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager;
|
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils;
|
import org.apache.dolphinscheduler.plugin.task.api.utils.LogUtils;
|
||||||
import org.apache.dolphinscheduler.server.worker.config.WorkerConfig;
|
import org.apache.dolphinscheduler.server.worker.config.WorkerConfig;
|
||||||
import org.apache.dolphinscheduler.server.worker.message.MessageRetryRunner;
|
import org.apache.dolphinscheduler.server.worker.message.MessageRetryRunner;
|
||||||
|
|
@ -70,8 +69,6 @@ public class TaskInstanceOperationFunctionTest {
|
||||||
|
|
||||||
private WorkerMessageSender workerMessageSender = Mockito.mock(WorkerMessageSender.class);
|
private WorkerMessageSender workerMessageSender = Mockito.mock(WorkerMessageSender.class);
|
||||||
|
|
||||||
private TaskPluginManager taskPluginManager = Mockito.mock(TaskPluginManager.class);
|
|
||||||
|
|
||||||
private WorkerTaskExecutorThreadPool workerManager = Mockito.mock(WorkerTaskExecutorThreadPool.class);
|
private WorkerTaskExecutorThreadPool workerManager = Mockito.mock(WorkerTaskExecutorThreadPool.class);
|
||||||
|
|
||||||
private StorageOperate storageOperate = Mockito.mock(StorageOperate.class);
|
private StorageOperate storageOperate = Mockito.mock(StorageOperate.class);
|
||||||
|
|
@ -94,7 +91,6 @@ public class TaskInstanceOperationFunctionTest {
|
||||||
WorkerTaskExecutorFactoryBuilder workerTaskExecutorFactoryBuilder = new WorkerTaskExecutorFactoryBuilder(
|
WorkerTaskExecutorFactoryBuilder workerTaskExecutorFactoryBuilder = new WorkerTaskExecutorFactoryBuilder(
|
||||||
workerConfig,
|
workerConfig,
|
||||||
workerMessageSender,
|
workerMessageSender,
|
||||||
taskPluginManager,
|
|
||||||
workerManager,
|
workerManager,
|
||||||
storageOperate,
|
storageOperate,
|
||||||
workerRegistryClient);
|
workerRegistryClient);
|
||||||
|
|
@ -189,7 +185,6 @@ public class TaskInstanceOperationFunctionTest {
|
||||||
WorkerTaskExecutorFactoryBuilder workerTaskExecutorFactoryBuilder = new WorkerTaskExecutorFactoryBuilder(
|
WorkerTaskExecutorFactoryBuilder workerTaskExecutorFactoryBuilder = new WorkerTaskExecutorFactoryBuilder(
|
||||||
workerConfig,
|
workerConfig,
|
||||||
workerMessageSender,
|
workerMessageSender,
|
||||||
taskPluginManager,
|
|
||||||
workerManager,
|
workerManager,
|
||||||
storageOperate,
|
storageOperate,
|
||||||
workerRegistryClient);
|
workerRegistryClient);
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,8 @@
|
||||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
<encoder>
|
<encoder>
|
||||||
<pattern>
|
<pattern>
|
||||||
[%level] %date{yyyy-MM-dd HH:mm:ss.SSS Z} %logger{96}:[%line] - [WorkflowInstance-%X{workflowInstanceId:-0}][TaskInstance-%X{taskInstanceId:-0}] - %msg%n
|
[%level] %date{yyyy-MM-dd HH:mm:ss.SSS Z} %logger{96}:[%line] -
|
||||||
|
[WorkflowInstance-%X{workflowInstanceId:-0}][TaskInstance-%X{taskInstanceId:-0}] - %msg%n
|
||||||
</pattern>
|
</pattern>
|
||||||
<charset>UTF-8</charset>
|
<charset>UTF-8</charset>
|
||||||
</encoder>
|
</encoder>
|
||||||
|
|
@ -60,18 +61,15 @@
|
||||||
</rollingPolicy>
|
</rollingPolicy>
|
||||||
<encoder>
|
<encoder>
|
||||||
<pattern>
|
<pattern>
|
||||||
[%level] %date{yyyy-MM-dd HH:mm:ss.SSS Z} %logger{96}:[%line] - [WorkflowInstance-%X{workflowInstanceId:-0}][TaskInstance-%X{taskInstanceId:-0}] - %msg%n
|
[%level] %date{yyyy-MM-dd HH:mm:ss.SSS Z} %logger{96}:[%line] -
|
||||||
|
[WorkflowInstance-%X{workflowInstanceId:-0}][TaskInstance-%X{taskInstanceId:-0}] - %msg%n
|
||||||
</pattern>
|
</pattern>
|
||||||
<charset>UTF-8</charset>
|
<charset>UTF-8</charset>
|
||||||
</encoder>
|
</encoder>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
<root level="INFO">
|
<root level="ERROR">
|
||||||
<if condition="${DOCKER:-false}">
|
<appender-ref ref="STDOUT"/>
|
||||||
<then>
|
|
||||||
<appender-ref ref="STDOUT"/>
|
|
||||||
</then>
|
|
||||||
</if>
|
|
||||||
<appender-ref ref="TASKLOGFILE"/>
|
<appender-ref ref="TASKLOGFILE"/>
|
||||||
<appender-ref ref="WORKERLOGFILE"/>
|
<appender-ref ref="WORKERLOGFILE"/>
|
||||||
</root>
|
</root>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue