Browse Source

refactor-worker merge to dev bug fix

pull/2/head
qiaozhanwei 5 years ago
parent
commit
433b41dd7f
  1. 3
      dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HadoopUtils.java
  2. 18
      dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskInstance.java
  3. 1
      dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/builder/TaskExecutionContextBuilder.java
  4. 14
      dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/entity/TaskExecutionContext.java
  5. 53
      dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/consumer/TaskPriorityQueueConsumer.java
  6. 4
      dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskExecuteThread.java
  7. 12
      dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java
  8. 43
      pom.xml

3
dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HadoopUtils.java

@ -91,8 +91,7 @@ public class HadoopUtils implements Closeable {
*/ */
private void initHdfsPath() { private void initHdfsPath() {
String hdfsPath = PropertyUtils.getString(resourceUploadPath); Path path = new Path(resourceUploadPath);
Path path = new Path(hdfsPath);
try { try {
if (!fs.exists(path)) { if (!fs.exists(path)) {

18
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskInstance.java

@ -29,6 +29,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* task instance * task instance
@ -47,6 +48,8 @@ public class TaskInstance implements Serializable {
*/ */
private String name; private String name;
/** /**
* task type * task type
*/ */
@ -205,8 +208,12 @@ public class TaskInstance implements Serializable {
private String executorName; private String executorName;
@TableField(exist = false)
private List<String> resources;
public void init(String host,Date startTime,String executePath){ public void init(String host,Date startTime,String executePath){
this.host = host; this.host = host;
this.startTime = startTime; this.startTime = startTime;
this.executePath = executePath; this.executePath = executePath;
@ -446,6 +453,15 @@ public class TaskInstance implements Serializable {
|| this.getState().typeIsCancel() || this.getState().typeIsCancel()
|| (this.getState().typeIsFailure() && !taskCanRetry()); || (this.getState().typeIsFailure() && !taskCanRetry());
} }
public List<String> getResources() {
return resources;
}
public void setResources(List<String> resources) {
this.resources = resources;
}
/** /**
* determine if you can try again * determine if you can try again
* @return can try result * @return can try result

1
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/builder/TaskExecutionContextBuilder.java

@ -50,6 +50,7 @@ public class TaskExecutionContextBuilder {
taskExecutionContext.setTaskJson(taskInstance.getTaskJson()); taskExecutionContext.setTaskJson(taskInstance.getTaskJson());
taskExecutionContext.setWorkerGroup(taskInstance.getWorkerGroup()); taskExecutionContext.setWorkerGroup(taskInstance.getWorkerGroup());
taskExecutionContext.setHost(taskInstance.getHost()); taskExecutionContext.setHost(taskInstance.getHost());
taskExecutionContext.setResources(taskInstance.getResources());
return this; return this;
} }

14
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/entity/TaskExecutionContext.java

@ -23,6 +23,7 @@ import org.apache.dolphinscheduler.remote.utils.FastJsonSerializer;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@ -166,6 +167,10 @@ public class TaskExecutionContext implements Serializable{
*/ */
private String workerGroup; private String workerGroup;
/**
* resources full name
*/
private List<String> resources;
/** /**
* sql TaskExecutionContext * sql TaskExecutionContext
@ -433,6 +438,14 @@ public class TaskExecutionContext implements Serializable{
this.dependenceTaskExecutionContext = dependenceTaskExecutionContext; this.dependenceTaskExecutionContext = dependenceTaskExecutionContext;
} }
public List<String> getResources() {
return resources;
}
public void setResources(List<String> resources) {
this.resources = resources;
}
@Override @Override
public String toString() { public String toString() {
return "TaskExecutionContext{" + return "TaskExecutionContext{" +
@ -462,6 +475,7 @@ public class TaskExecutionContext implements Serializable{
", taskTimeoutStrategy=" + taskTimeoutStrategy + ", taskTimeoutStrategy=" + taskTimeoutStrategy +
", taskTimeout=" + taskTimeout + ", taskTimeout=" + taskTimeout +
", workerGroup='" + workerGroup + '\'' + ", workerGroup='" + workerGroup + '\'' +
", resources=" + resources +
", sqlTaskExecutionContext=" + sqlTaskExecutionContext + ", sqlTaskExecutionContext=" + sqlTaskExecutionContext +
", dataxTaskExecutionContext=" + dataxTaskExecutionContext + ", dataxTaskExecutionContext=" + dataxTaskExecutionContext +
", dependenceTaskExecutionContext=" + dependenceTaskExecutionContext + ", dependenceTaskExecutionContext=" + dependenceTaskExecutionContext +

53
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/consumer/TaskPriorityQueueConsumer.java

@ -22,6 +22,8 @@ import org.apache.dolphinscheduler.common.enums.ExecutionStatus;
import org.apache.dolphinscheduler.common.enums.TaskType; import org.apache.dolphinscheduler.common.enums.TaskType;
import org.apache.dolphinscheduler.common.enums.UdfType; import org.apache.dolphinscheduler.common.enums.UdfType;
import org.apache.dolphinscheduler.common.model.TaskNode; import org.apache.dolphinscheduler.common.model.TaskNode;
import org.apache.dolphinscheduler.common.process.ResourceInfo;
import org.apache.dolphinscheduler.common.task.AbstractParameters;
import org.apache.dolphinscheduler.common.task.datax.DataxParameters; import org.apache.dolphinscheduler.common.task.datax.DataxParameters;
import org.apache.dolphinscheduler.common.task.procedure.ProcedureParameters; import org.apache.dolphinscheduler.common.task.procedure.ProcedureParameters;
import org.apache.dolphinscheduler.common.task.sql.SqlParameters; import org.apache.dolphinscheduler.common.task.sql.SqlParameters;
@ -29,10 +31,8 @@ import org.apache.dolphinscheduler.common.thread.Stopper;
import org.apache.dolphinscheduler.common.utils.EnumUtils; import org.apache.dolphinscheduler.common.utils.EnumUtils;
import org.apache.dolphinscheduler.common.utils.FileUtils; import org.apache.dolphinscheduler.common.utils.FileUtils;
import org.apache.dolphinscheduler.common.utils.StringUtils; import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.dao.entity.DataSource; import org.apache.dolphinscheduler.common.utils.TaskParametersUtils;
import org.apache.dolphinscheduler.dao.entity.TaskInstance; import org.apache.dolphinscheduler.dao.entity.*;
import org.apache.dolphinscheduler.dao.entity.Tenant;
import org.apache.dolphinscheduler.dao.entity.UdfFunc;
import org.apache.dolphinscheduler.server.builder.TaskExecutionContextBuilder; import org.apache.dolphinscheduler.server.builder.TaskExecutionContextBuilder;
import org.apache.dolphinscheduler.server.entity.*; import org.apache.dolphinscheduler.server.entity.*;
import org.apache.dolphinscheduler.server.master.dispatch.ExecutorDispatcher; import org.apache.dolphinscheduler.server.master.dispatch.ExecutorDispatcher;
@ -47,7 +47,12 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/** /**
* TaskUpdateQueue consumer * TaskUpdateQueue consumer
@ -127,6 +132,12 @@ public class TaskPriorityQueueConsumer extends Thread{
protected TaskExecutionContext getTaskExecutionContext(int taskInstanceId){ protected TaskExecutionContext getTaskExecutionContext(int taskInstanceId){
TaskInstance taskInstance = processService.getTaskInstanceDetailByTaskId(taskInstanceId); TaskInstance taskInstance = processService.getTaskInstanceDetailByTaskId(taskInstanceId);
// task type
TaskType taskType = TaskType.valueOf(taskInstance.getTaskType());
// task node
TaskNode taskNode = JSONObject.parseObject(taskInstance.getTaskJson(), TaskNode.class);
Integer userId = taskInstance.getProcessDefine() == null ? 0 : taskInstance.getProcessDefine().getUserId(); Integer userId = taskInstance.getProcessDefine() == null ? 0 : taskInstance.getProcessDefine().getUserId();
Tenant tenant = processService.getTenantForProcess(taskInstance.getProcessInstance().getTenantId(), userId); Tenant tenant = processService.getTenantForProcess(taskInstance.getProcessInstance().getTenantId(), userId);
@ -145,14 +156,14 @@ public class TaskPriorityQueueConsumer extends Thread{
taskInstance.getProcessInstance().setQueue(StringUtils.isEmpty(userQueue) ? tenant.getQueue() : userQueue); taskInstance.getProcessInstance().setQueue(StringUtils.isEmpty(userQueue) ? tenant.getQueue() : userQueue);
taskInstance.getProcessInstance().setTenantCode(tenant.getTenantCode()); taskInstance.getProcessInstance().setTenantCode(tenant.getTenantCode());
taskInstance.setExecutePath(getExecLocalPath(taskInstance)); taskInstance.setExecutePath(getExecLocalPath(taskInstance));
taskInstance.setResources(getResourceFullNames(taskNode));
SQLTaskExecutionContext sqlTaskExecutionContext = new SQLTaskExecutionContext(); SQLTaskExecutionContext sqlTaskExecutionContext = new SQLTaskExecutionContext();
DataxTaskExecutionContext dataxTaskExecutionContext = new DataxTaskExecutionContext(); DataxTaskExecutionContext dataxTaskExecutionContext = new DataxTaskExecutionContext();
ProcedureTaskExecutionContext procedureTaskExecutionContext = new ProcedureTaskExecutionContext(); ProcedureTaskExecutionContext procedureTaskExecutionContext = new ProcedureTaskExecutionContext();
TaskType taskType = TaskType.valueOf(taskInstance.getTaskType());
TaskNode taskNode = JSONObject.parseObject(taskInstance.getTaskJson(), TaskNode.class);
// SQL task // SQL task
if (taskType == TaskType.SQL){ if (taskType == TaskType.SQL){
setSQLTaskRelation(sqlTaskExecutionContext, taskNode); setSQLTaskRelation(sqlTaskExecutionContext, taskNode);
@ -171,7 +182,6 @@ public class TaskPriorityQueueConsumer extends Thread{
} }
return TaskExecutionContextBuilder.get() return TaskExecutionContextBuilder.get()
.buildTaskInstanceRelatedInfo(taskInstance) .buildTaskInstanceRelatedInfo(taskInstance)
.buildProcessInstanceRelatedInfo(taskInstance.getProcessInstance()) .buildProcessInstanceRelatedInfo(taskInstance.getProcessInstance())
@ -270,4 +280,33 @@ public class TaskPriorityQueueConsumer extends Thread{
} }
return false; return false;
} }
/**
* create project resource files
*/
private List<String> getResourceFullNames(TaskNode taskNode){
Set<Integer> resourceIdsSet = new HashSet<>();
AbstractParameters baseParam = TaskParametersUtils.getParameters(taskNode.getType(), taskNode.getParams());
if (baseParam != null) {
List<ResourceInfo> projectResourceFiles = baseParam.getResourceFilesList();
if (projectResourceFiles != null) {
Stream<Integer> resourceInfotream = projectResourceFiles.stream().map(resourceInfo -> resourceInfo.getId());
resourceIdsSet.addAll(resourceInfotream.collect(Collectors.toSet()));
}
}
Integer[] resourceIds = resourceIdsSet.toArray(new Integer[resourceIdsSet.size()]);
List<Resource> resources = processService.listResourceByIds(resourceIds);
List<String> resourceFullNames = resources.stream()
.map(resourceInfo -> resourceInfo.getFullName())
.collect(Collectors.toList());
return resourceFullNames;
}
} }

4
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskExecuteThread.java

@ -83,11 +83,9 @@ public class TaskExecuteThread implements Runnable {
// task node // task node
TaskNode taskNode = JSONObject.parseObject(taskExecutionContext.getTaskJson(), TaskNode.class); TaskNode taskNode = JSONObject.parseObject(taskExecutionContext.getTaskJson(), TaskNode.class);
// get resource files
List<String> resourceFiles = createProjectResFiles(taskNode);
// copy hdfs/minio file to local // copy hdfs/minio file to local
downloadResource(taskExecutionContext.getExecutePath(), downloadResource(taskExecutionContext.getExecutePath(),
resourceFiles, taskExecutionContext.getResources(),
taskExecutionContext.getTenantCode(), taskExecutionContext.getTenantCode(),
logger); logger);

12
dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java

@ -1487,7 +1487,7 @@ public class ProcessService {
* @return tenant code * @return tenant code
*/ */
public String queryTenantCodeByResName(String resName,ResourceType resourceType){ public String queryTenantCodeByResName(String resName,ResourceType resourceType){
return resourceMapper.queryTenantCodeByResourceName(resName,resourceType.ordinal()); return resourceMapper.queryTenantCodeByResourceName(resName, resourceType.ordinal());
} }
/** /**
@ -1766,4 +1766,14 @@ public class ProcessService {
} }
/**
* list resources by ids
* @param resIds resIds
* @return resource list
*/
public List<Resource> listResourceByIds(Integer[] resIds){
return resourceMapper.listResourceByIds(resIds);
}
} }

43
pom.xml

@ -691,25 +691,25 @@
<include>**/alert/utils/JSONUtilsTest.java</include> <include>**/alert/utils/JSONUtilsTest.java</include>
<include>**/alert/utils/MailUtilsTest.java</include> <include>**/alert/utils/MailUtilsTest.java</include>
<include>**/alert/utils/PropertyUtilsTest.java</include> <include>**/alert/utils/PropertyUtilsTest.java</include>
<include>**/api/controller/AccessTokenControllerTest.java</include> <!--<include>**/api/controller/AccessTokenControllerTest.java</include>-->
<include>**/api/controller/AlertGroupControllerTest.java</include> <!--<include>**/api/controller/AlertGroupControllerTest.java</include>-->
<include>**/api/controller/DataAnalysisControllerTest.java</include> <!--<include>**/api/controller/DataAnalysisControllerTest.java</include>-->
<include>**/api/controller/DataSourceControllerTest.java</include> <!--<include>**/api/controller/DataSourceControllerTest.java</include>-->
<include>**/api/controller/ExecutorControllerTest.java</include> <!--<include>**/api/controller/ExecutorControllerTest.java</include>-->
<include>**/api/controller/LoggerControllerTest.java</include> <!--<include>**/api/controller/LoggerControllerTest.java</include>-->
<include>**/api/controller/LoginControllerTest.java</include> <!--<include>**/api/controller/LoginControllerTest.java</include>-->
<include>**/api/controller/MonitorControllerTest.java</include> <!--<include>**/api/controller/MonitorControllerTest.java</include>-->
<include>**/api/controller/ProcessDefinitionControllerTest.java</include> <!--<include>**/api/controller/ProcessDefinitionControllerTest.java</include>-->
<include>**/api/controller/ProcessInstanceControllerTest.java</include> <!--<include>**/api/controller/ProcessInstanceControllerTest.java</include>-->
<include>**/api/controller/ProjectControllerTest.java</include> <!--<include>**/api/controller/ProjectControllerTest.java</include>-->
<include>**/api/controller/QueueControllerTest.java</include> <!--<include>**/api/controller/QueueControllerTest.java</include>-->
<include>**/api/controller/ResourcesControllerTest.java</include> <!--<include>**/api/controller/ResourcesControllerTest.java</include>-->
<include>**/api/controller/SchedulerControllerTest.java</include> <!--<include>**/api/controller/SchedulerControllerTest.java</include>-->
<include>**/api/controller/TaskInstanceControllerTest.java</include> <!--<include>**/api/controller/TaskInstanceControllerTest.java</include>-->
<include>**/api/controller/TaskRecordControllerTest.java</include> <!--<include>**/api/controller/TaskRecordControllerTest.java</include>-->
<include>**/api/controller/TenantControllerTest.java</include> <!--<include>**/api/controller/TenantControllerTest.java</include>-->
<include>**/api/controller/UsersControllerTest.java</include> <!--<include>**/api/controller/UsersControllerTest.java</include>-->
<include>**/api/controller/WorkerGroupControllerTest.java</include> <!--<include>**/api/controller/WorkerGroupControllerTest.java</include>-->
<include>**/api/dto/resources/filter/ResourceFilterTest.java</include> <include>**/api/dto/resources/filter/ResourceFilterTest.java</include>
<include>**/api/dto/resources/visitor/ResourceTreeVisitorTest.java</include> <include>**/api/dto/resources/visitor/ResourceTreeVisitorTest.java</include>
<include>**/api/enums/testGetEnum.java</include> <include>**/api/enums/testGetEnum.java</include>
@ -783,11 +783,6 @@
<include>**/common/utils/StringUtilsTest.java</include> <include>**/common/utils/StringUtilsTest.java</include>
<include>**/common/utils/TaskParametersUtilsTest.java</include> <include>**/common/utils/TaskParametersUtilsTest.java</include>
<include>**/common/ConstantsTest.java</include> <include>**/common/ConstantsTest.java</include>
<include>**/dao/mapper/AccessTokenMapperTest.java</include> <include>**/dao/mapper/AccessTokenMapperTest.java</include>
<include>**/dao/mapper/AlertGroupMapperTest.java</include> <include>**/dao/mapper/AlertGroupMapperTest.java</include>
<include>**/dao/mapper/AlertMapperTest.java</include> <include>**/dao/mapper/AlertMapperTest.java</include>

Loading…
Cancel
Save