From a8b47e1d4f4ebb9795239ef69b57f2928a81f44c Mon Sep 17 00:00:00 2001
From: wenjun <861923274@qq.com>
Date: Fri, 26 Mar 2021 09:47:21 +0800
Subject: [PATCH 1/8] [Bug][Master] Typo in MasterConfig #5141 (#5142)
---
.../server/master/config/MasterConfig.java | 2 +-
.../master/config/MasterConfigTest.java | 39 +++++++++++++++++
.../src/test/resources/master.properties | 43 +++++++++++++++++++
pom.xml | 1 +
4 files changed, 84 insertions(+), 1 deletion(-)
create mode 100644 dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/config/MasterConfigTest.java
create mode 100644 dolphinscheduler-server/src/test/resources/master.properties
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/config/MasterConfig.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/config/MasterConfig.java
index efd29ddd3c..ef5236264e 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/config/MasterConfig.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/config/MasterConfig.java
@@ -37,7 +37,7 @@ public class MasterConfig {
@Value("${master.task.commit.retryTimes:5}")
private int masterTaskCommitRetryTimes;
- @Value("${master.dispatch.task.num :3}")
+ @Value("${master.dispatch.task.num:3}")
private int masterDispatchTaskNumber;
@Value("${master.task.commit.interval:1000}")
diff --git a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/config/MasterConfigTest.java b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/config/MasterConfigTest.java
new file mode 100644
index 0000000000..43d2469275
--- /dev/null
+++ b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/config/MasterConfigTest.java
@@ -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.server.master.config;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes = {MasterConfig.class})
+public class MasterConfigTest {
+
+ @Autowired
+ private MasterConfig masterConfig;
+
+ @Test
+ public void getMasterDispatchTaskNumber() {
+ int masterDispatchTaskNumber = masterConfig.getMasterDispatchTaskNumber();
+ Assert.assertEquals(6, masterDispatchTaskNumber);
+ }
+}
\ No newline at end of file
diff --git a/dolphinscheduler-server/src/test/resources/master.properties b/dolphinscheduler-server/src/test/resources/master.properties
new file mode 100644
index 0000000000..91d84ebd10
--- /dev/null
+++ b/dolphinscheduler-server/src/test/resources/master.properties
@@ -0,0 +1,43 @@
+#
+# 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.
+#
+
+# master execute thread num
+#master.exec.threads=100
+
+# master execute task number in parallel
+#master.exec.task.num=20
+
+# master dispatch task number
+master.dispatch.task.num=6
+
+# master heartbeat interval
+#master.heartbeat.interval=10
+
+# master commit task retry times
+#master.task.commit.retryTimes=5
+
+# master commit task interval
+#master.task.commit.interval=1000
+
+# only less than cpu avg load, master server can work. default value -1 : the number of cpu cores * 2
+#master.max.cpuload.avg=-1
+
+# only larger than reserved memory, master server can work. default value : physical memory * 1/10, unit is G.
+#master.reserved.memory=0.3
+
+# master listen port
+#master.listen.port=5678
diff --git a/pom.xml b/pom.xml
index 96c2e94298..660da7ba0e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -914,6 +914,7 @@
**/server/log/TaskLogFilterTest.java
**/server/log/WorkerLogFilterTest.java
+ **/server/master/config/MasterConfigTest.java
**/server/master/consumer/TaskPriorityQueueConsumerTest.java
**/server/master/runner/MasterTaskExecThreadTest.java
From 492b318bd321d35247488e1f181e3ea9d1259963 Mon Sep 17 00:00:00 2001
From: Shiwen Cheng
Date: Fri, 26 Mar 2021 10:11:56 +0800
Subject: [PATCH 2/8] [Fix][Server] Fix clear task execute path is related to
master (#5123)
---
.../common/utils/FileUtils.java | 23 +---------
.../common/utils/FileUtilsTest.java | 4 +-
.../master/runner/MasterExecThread.java | 30 -------------
.../processor/TaskExecuteProcessor.java | 2 +-
.../worker/runner/TaskExecuteThread.java | 45 ++++++++++++++++---
.../server/master/MasterExecThreadTest.java | 6 +--
6 files changed, 43 insertions(+), 67 deletions(-)
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/FileUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/FileUtils.java
index 0dcfbddaf4..ae6291a854 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/FileUtils.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/FileUtils.java
@@ -121,27 +121,8 @@ public class FileUtils {
* @return directory of process execution
*/
public static String getProcessExecDir(int projectId, int processDefineId, int processInstanceId, int taskInstanceId) {
- String fileName = String.format("%s/exec/process/%s/%s/%s/%s", DATA_BASEDIR, Integer.toString(projectId),
- Integer.toString(processDefineId), Integer.toString(processInstanceId), Integer.toString(taskInstanceId));
- File file = new File(fileName);
- if (!file.getParentFile().exists()) {
- file.getParentFile().mkdirs();
- }
-
- return fileName;
- }
-
- /**
- * directory of process instances
- *
- * @param projectId project id
- * @param processDefineId process definition id
- * @param processInstanceId process instance id
- * @return directory of process instances
- */
- public static String getProcessExecDir(int projectId, int processDefineId, int processInstanceId) {
- String fileName = String.format("%s/exec/process/%s/%s/%s", DATA_BASEDIR, Integer.toString(projectId),
- Integer.toString(processDefineId), Integer.toString(processInstanceId));
+ String fileName = String.format("%s/exec/process/%d/%d/%d/%d", DATA_BASEDIR,
+ projectId, processDefineId, processInstanceId, taskInstanceId);
File file = new File(fileName);
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
diff --git a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/FileUtilsTest.java b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/FileUtilsTest.java
index a4a39ae252..a1ddef158f 100644
--- a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/FileUtilsTest.java
+++ b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/FileUtilsTest.java
@@ -60,10 +60,8 @@ public class FileUtilsTest {
@Test
public void testGetProcessExecDir() {
- String dir = FileUtils.getProcessExecDir(1,2,3, 4);
+ String dir = FileUtils.getProcessExecDir(1, 2, 3, 4);
Assert.assertEquals("/tmp/dolphinscheduler/exec/process/1/2/3/4", dir);
- dir = FileUtils.getProcessExecDir(1,2,3);
- Assert.assertEquals("/tmp/dolphinscheduler/exec/process/1/2/3", dir);
}
@Test
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
index b7a4d00380..b9ad8f37b6 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
@@ -42,7 +42,6 @@ import org.apache.dolphinscheduler.common.process.Property;
import org.apache.dolphinscheduler.common.thread.Stopper;
import org.apache.dolphinscheduler.common.thread.ThreadUtils;
import org.apache.dolphinscheduler.common.utils.CollectionUtils;
-import org.apache.dolphinscheduler.common.utils.CommonUtils;
import org.apache.dolphinscheduler.common.utils.DateUtils;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
import org.apache.dolphinscheduler.common.utils.OSUtils;
@@ -61,16 +60,11 @@ import org.apache.dolphinscheduler.service.process.ProcessService;
import org.apache.dolphinscheduler.service.quartz.cron.CronUtils;
import org.apache.dolphinscheduler.service.queue.PeerTaskInstancePriorityQueue;
-import org.apache.commons.io.FileUtils;
-
-import java.io.File;
-import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -78,7 +72,6 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
-import java.util.stream.Collectors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -236,8 +229,6 @@ public class MasterExecThread implements Runnable {
processService.updateProcessInstance(processInstance);
} finally {
taskExecService.shutdown();
- // post handle
- postHandle();
}
}
@@ -427,27 +418,6 @@ public class MasterExecThread implements Runnable {
}
}
- /**
- * process post handle
- */
- private void postHandle() {
- logger.info("develop mode is: {}", CommonUtils.isDevelopMode());
-
- if (!CommonUtils.isDevelopMode()) {
- // get exec dir
- String execLocalPath = org.apache.dolphinscheduler.common.utils.FileUtils
- .getProcessExecDir(processInstance.getProcessDefinition().getProjectId(),
- processInstance.getProcessDefinitionId(),
- processInstance.getId());
-
- try {
- FileUtils.deleteDirectory(new File(execLocalPath));
- } catch (IOException e) {
- logger.error("delete exec dir failed ", e);
- }
- }
- }
-
/**
* submit task to execute
*
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskExecuteProcessor.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskExecuteProcessor.java
index cfd2c3fe2f..f03d86bb65 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskExecuteProcessor.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskExecuteProcessor.java
@@ -141,7 +141,7 @@ public class TaskExecuteProcessor implements NettyRequestProcessor {
// local execute path
String execLocalPath = getExecLocalPath(taskExecutionContext);
- logger.info("task instance local execute path : {} ", execLocalPath);
+ logger.info("task instance local execute path : {}", execLocalPath);
taskExecutionContext.setExecutePath(execLocalPath);
FileUtils.taskLoggerThreadLocal.set(taskLogger);
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskExecuteThread.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskExecuteThread.java
index c036ac9f69..409c2b7a2e 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskExecuteThread.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskExecuteThread.java
@@ -29,6 +29,7 @@ import org.apache.dolphinscheduler.common.utils.HadoopUtils;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
import org.apache.dolphinscheduler.common.utils.OSUtils;
import org.apache.dolphinscheduler.common.utils.RetryerUtils;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.remote.command.Command;
import org.apache.dolphinscheduler.remote.command.TaskExecuteAckCommand;
import org.apache.dolphinscheduler.remote.command.TaskExecuteResponseCommand;
@@ -45,6 +46,7 @@ import org.apache.dolphinscheduler.service.bean.SpringApplicationContext;
import org.apache.commons.collections.MapUtils;
import java.io.File;
+import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -71,17 +73,17 @@ public class TaskExecuteThread implements Runnable, Delayed {
private final Logger logger = LoggerFactory.getLogger(TaskExecuteThread.class);
/**
- * task instance
+ * task instance
*/
private TaskExecutionContext taskExecutionContext;
/**
- * abstract task
+ * abstract task
*/
private AbstractTask task;
/**
- * task callback service
+ * task callback service
*/
private TaskCallbackService taskCallbackService;
@@ -185,9 +187,38 @@ public class TaskExecuteThread implements Runnable, Delayed {
responseCommand.setAppIds(task.getAppIds());
} finally {
taskExecutionContextCacheManager.removeByTaskInstanceId(taskExecutionContext.getTaskInstanceId());
- ResponceCache.get().cache(taskExecutionContext.getTaskInstanceId(),responseCommand.convert2Command(),Event.RESULT);
+ ResponceCache.get().cache(taskExecutionContext.getTaskInstanceId(), responseCommand.convert2Command(), Event.RESULT);
taskCallbackService.sendResult(taskExecutionContext.getTaskInstanceId(), responseCommand.convert2Command());
+ clearTaskExecPath();
+ }
+ }
+ /**
+ * when task finish, clear execute path.
+ */
+ private void clearTaskExecPath() {
+ logger.info("develop mode is: {}", CommonUtils.isDevelopMode());
+
+ if (!CommonUtils.isDevelopMode()) {
+ // get exec dir
+ String execLocalPath = taskExecutionContext.getExecutePath();
+
+ if (StringUtils.isEmpty(execLocalPath)) {
+ logger.warn("task: {} exec local path is empty.", taskExecutionContext.getTaskName());
+ return;
+ }
+
+ if ("/".equals(execLocalPath)) {
+ logger.warn("task: {} exec local path is '/', direct deletion is not allowed", taskExecutionContext.getTaskName());
+ return;
+ }
+
+ try {
+ org.apache.commons.io.FileUtils.deleteDirectory(new File(execLocalPath));
+ logger.info("exec local path: {} cleared.", execLocalPath);
+ } catch (IOException e) {
+ logger.error("delete exec dir failed : {}", e.getMessage(), e);
+ }
}
}
@@ -196,7 +227,7 @@ public class TaskExecuteThread implements Runnable, Delayed {
* @return
*/
private Map getGlobalParamsMap() {
- Map globalParamsMap = new HashMap<>(16);
+ Map globalParamsMap = new HashMap<>(16);
// global params string
String globalParamsStr = taskExecutionContext.getGlobalParams();
@@ -241,7 +272,7 @@ public class TaskExecuteThread implements Runnable, Delayed {
}
/**
- * kill task
+ * kill task
*/
public void kill() {
if (task != null) {
@@ -261,7 +292,7 @@ public class TaskExecuteThread implements Runnable, Delayed {
* @param logger
*/
private void downloadResource(String execLocalPath,
- Map projectRes,
+ Map projectRes,
Logger logger) throws Exception {
if (MapUtils.isEmpty(projectRes)) {
return;
diff --git a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/MasterExecThreadTest.java b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/MasterExecThreadTest.java
index 6979a939e7..cdea2526af 100644
--- a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/MasterExecThreadTest.java
+++ b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/MasterExecThreadTest.java
@@ -102,16 +102,12 @@ public class MasterExecThreadTest {
processDefinition.setGlobalParamList(Collections.EMPTY_LIST);
Mockito.when(processInstance.getProcessDefinition()).thenReturn(processDefinition);
- masterExecThread = PowerMockito.spy(new MasterExecThread(
- processInstance
- , processService
- , null, null, config));
+ masterExecThread = PowerMockito.spy(new MasterExecThread(processInstance, processService, null, null, config));
// prepareProcess init dag
Field dag = MasterExecThread.class.getDeclaredField("dag");
dag.setAccessible(true);
dag.set(masterExecThread, new DAG());
PowerMockito.doNothing().when(masterExecThread, "executeProcess");
- PowerMockito.doNothing().when(masterExecThread, "postHandle");
PowerMockito.doNothing().when(masterExecThread, "prepareProcess");
PowerMockito.doNothing().when(masterExecThread, "runProcess");
PowerMockito.doNothing().when(masterExecThread, "endProcess");
From f6d62a4924417fbcdea35ba2896a652eb9bc735c Mon Sep 17 00:00:00 2001
From: zhuangchong <37063904+zhuangchong@users.noreply.github.com>
Date: Fri, 26 Mar 2021 16:42:13 +0800
Subject: [PATCH 3/8] [Improvement-5144][UI] error v-show directives cannot be
put on template tags (#5145)
* fix error v-show directives cannot be put on template tags.
* rerun e2e.
---
.../home/pages/projects/pages/instance/pages/gantt/index.vue | 4 ++--
.../conf/home/pages/resource/pages/file/pages/edit/index.vue | 5 ++---
2 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/gantt/index.vue b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/gantt/index.vue
index 252fedc971..c9389485d8 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/gantt/index.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/gantt/index.vue
@@ -29,10 +29,10 @@
-
+
-
+
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/resource/pages/file/pages/edit/index.vue b/dolphinscheduler-ui/src/js/conf/home/pages/resource/pages/file/pages/edit/index.vue
index e4c7586419..7e8c5edd60 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/resource/pages/file/pages/edit/index.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/resource/pages/file/pages/edit/index.vue
@@ -21,7 +21,7 @@
{{name}}
-
+
@@ -32,9 +32,8 @@
-
-
+
From 87ed189ef5a7c23f31bbbbc34ea32e527f25c97c Mon Sep 17 00:00:00 2001
From: wenjun <861923274@qq.com>
Date: Mon, 29 Mar 2021 10:15:18 +0800
Subject: [PATCH 4/8] [Improvement] print exception when task execute (#5159)
---
.../server/master/runner/MasterExecThread.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
index b9ad8f37b6..d93e9e6813 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
@@ -887,7 +887,7 @@ public class MasterExecThread implements Runnable {
try {
readyToSubmitTaskQueue.put(taskInstance);
} catch (Exception e) {
- logger.error("add task instance to readyToSubmitTaskQueue error");
+ logger.error("add task instance to readyToSubmitTaskQueue error, taskName: {}", taskInstance.getName(), e);
}
}
@@ -901,7 +901,7 @@ public class MasterExecThread implements Runnable {
try {
readyToSubmitTaskQueue.remove(taskInstance);
} catch (Exception e) {
- logger.error("remove task instance from readyToSubmitTaskQueue error");
+ logger.error("remove task instance from readyToSubmitTaskQueue error, taskName: {}", taskInstance.getName(), e);
}
}
From 573252f3e1baba5e133b6c8f608c22e3c2267a03 Mon Sep 17 00:00:00 2001
From: wenjun <861923274@qq.com>
Date: Mon, 29 Mar 2021 10:30:16 +0800
Subject: [PATCH 5/8] [Bug][Server] DB transaction failure #5150 (#5152)
---
.../apache/dolphinscheduler/server/master/MasterServer.java | 2 ++
.../apache/dolphinscheduler/server/worker/WorkerServer.java | 4 ++--
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java
index e03e8e87b1..c44b8a63a1 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java
@@ -43,10 +43,12 @@ import org.springframework.boot.WebApplicationType;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
@ComponentScan(value = "org.apache.dolphinscheduler", excludeFilters = {
@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {WorkerServer.class})
})
+@EnableTransactionManagement
public class MasterServer implements IStoppable {
/**
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/WorkerServer.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/WorkerServer.java
index 1278ae927b..dedfb46008 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/WorkerServer.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/WorkerServer.java
@@ -41,17 +41,17 @@ import javax.annotation.PostConstruct;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
import org.springframework.beans.factory.annotation.Autowired;
-
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.annotation.ComponentScan;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* worker server
*/
@ComponentScan("org.apache.dolphinscheduler")
+@EnableTransactionManagement
public class WorkerServer implements IStoppable {
/**
From 9c0439621836b5134b8a7da4e671cb74edc7c31b Mon Sep 17 00:00:00 2001
From: xiaojingXU <68894048+xxjingcd@users.noreply.github.com>
Date: Mon, 29 Mar 2021 10:41:51 +0800
Subject: [PATCH 6/8] [Bug-5132][server] stop the take immediately if an
exception occurs in the taskExecuteThread (#5133)
* [DS-5132][fix] stop the take immediately if an exception occurs in the taskExecuteThread
- let softkill() method return true when the process is stopped,else return false;
---
.../server/worker/task/AbstractCommandExecutor.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractCommandExecutor.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractCommandExecutor.java
index 73f2e700f0..392d279e8e 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractCommandExecutor.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractCommandExecutor.java
@@ -289,7 +289,7 @@ public abstract class AbstractCommandExecutor {
}
}
- return process.isAlive();
+ return !process.isAlive();
}
/**
From a6a1b94df4f5c4d22845fe99f2f778ba53d60e5c Mon Sep 17 00:00:00 2001
From: guohaozhang
Date: Mon, 29 Mar 2021 11:07:39 +0800
Subject: [PATCH 7/8] [Feature-#5128]Support turning off sudo permissions
(#5129)
* [Feature-#5128]Support turning off sudo permissions
* [Feature-#5128] without sudo permission do not create tenant user
---
.../apache/dolphinscheduler/common/Constants.java | 5 +++++
.../dolphinscheduler/common/utils/CommonUtils.java | 7 +++++++
.../dolphinscheduler/common/utils/OSUtils.java | 10 +++++++---
.../src/main/resources/common.properties | 3 +++
.../worker/processor/TaskExecuteProcessor.java | 3 ++-
.../server/worker/task/AbstractCommandExecutor.java | 13 ++++++++-----
6 files changed, 32 insertions(+), 9 deletions(-)
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
index c4b6243c48..0a46a35580 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
@@ -155,6 +155,11 @@ public final class Constants {
public static final String DEVELOPMENT_STATE = "development.state";
public static final String DEVELOPMENT_STATE_DEFAULT_VALUE = "true";
+ /**
+ * sudo enable
+ */
+ public static final String SUDO_ENABLE = "sudo.enable";
+
/**
* string true
*/
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/CommonUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/CommonUtils.java
index cf307b402f..e68c342ea4 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/CommonUtils.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/CommonUtils.java
@@ -68,6 +68,13 @@ public class CommonUtils {
return PropertyUtils.getBoolean(Constants.DEVELOPMENT_STATE, true);
}
+ /**
+ * @return sudo enable
+ */
+ public static boolean isSudoEnable() {
+ return PropertyUtils.getBoolean(Constants.SUDO_ENABLE, true);
+ }
+
/**
* if upload resource is HDFS and kerberos startup is true , else false
*
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/OSUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/OSUtils.java
index 92a06fe568..09b4e06d9f 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/OSUtils.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/OSUtils.java
@@ -22,12 +22,12 @@ import org.apache.dolphinscheduler.common.shell.ShellExecutor;
import org.apache.commons.configuration.Configuration;
-import java.lang.management.OperatingSystemMXBean;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.management.ManagementFactory;
+import java.lang.management.OperatingSystemMXBean;
import java.lang.management.RuntimeMXBean;
import java.math.RoundingMode;
import java.text.DecimalFormat;
@@ -406,13 +406,17 @@ public class OSUtils {
}
/**
- * get sudo command
+ * get sudo command
+ *
* @param tenantCode tenantCode
* @param command command
* @return result of sudo execute command
*/
public static String getSudoCmd(String tenantCode, String command) {
- return StringUtils.isEmpty(tenantCode) ? command : "sudo -u " + tenantCode + " " + command;
+ if (!CommonUtils.isSudoEnable() || StringUtils.isEmpty(tenantCode)) {
+ return command;
+ }
+ return String.format("sudo -u %s %s", tenantCode, command);
}
/**
diff --git a/dolphinscheduler-common/src/main/resources/common.properties b/dolphinscheduler-common/src/main/resources/common.properties
index 833e0491e2..e46dd15756 100644
--- a/dolphinscheduler-common/src/main/resources/common.properties
+++ b/dolphinscheduler-common/src/main/resources/common.properties
@@ -76,3 +76,6 @@ datasource.encryption.salt=!@#$%^&*
# Network IP gets priority, default inner outer
#dolphin.scheduler.network.priority.strategy=default
+
+# use sudo or not, if set true ,executing user is tenant user and deploy user need sudo permissions ; if set false, executing user is the deploy user, don't need sudo permissions.
+sudo.enable=true
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskExecuteProcessor.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskExecuteProcessor.java
index f03d86bb65..00f4956921 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskExecuteProcessor.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskExecuteProcessor.java
@@ -20,6 +20,7 @@ package org.apache.dolphinscheduler.server.worker.processor;
import org.apache.dolphinscheduler.common.enums.Event;
import org.apache.dolphinscheduler.common.enums.ExecutionStatus;
import org.apache.dolphinscheduler.common.enums.TaskType;
+import org.apache.dolphinscheduler.common.utils.CommonUtils;
import org.apache.dolphinscheduler.common.utils.DateUtils;
import org.apache.dolphinscheduler.common.utils.FileUtils;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
@@ -147,7 +148,7 @@ public class TaskExecuteProcessor implements NettyRequestProcessor {
FileUtils.taskLoggerThreadLocal.set(taskLogger);
try {
FileUtils.createWorkDirIfAbsent(execLocalPath);
- if (workerConfig.getWorkerTenantAutoCreate()) {
+ if (CommonUtils.isSudoEnable() && workerConfig.getWorkerTenantAutoCreate()) {
OSUtils.createUserIfAbsent(taskExecutionContext.getTenantCode());
}
} catch (Throwable ex) {
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractCommandExecutor.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractCommandExecutor.java
index 392d279e8e..88af2d7f2c 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractCommandExecutor.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractCommandExecutor.java
@@ -25,6 +25,7 @@ import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.ExecutionStatus;
import org.apache.dolphinscheduler.common.thread.Stopper;
import org.apache.dolphinscheduler.common.thread.ThreadUtils;
+import org.apache.dolphinscheduler.common.utils.CommonUtils;
import org.apache.dolphinscheduler.common.utils.HadoopUtils;
import org.apache.dolphinscheduler.common.utils.LoggerUtils;
import org.apache.dolphinscheduler.common.utils.OSUtils;
@@ -84,7 +85,7 @@ public abstract class AbstractCommandExecutor {
* log list
*/
protected final List logBuffer;
-
+
protected boolean logOutputIsScuccess = false;
/**
@@ -134,9 +135,11 @@ public abstract class AbstractCommandExecutor {
processBuilder.redirectErrorStream(true);
// setting up user to run commands
- command.add("sudo");
- command.add("-u");
- command.add(taskExecutionContext.getTenantCode());
+ if (CommonUtils.isSudoEnable()) {
+ command.add("sudo");
+ command.add("-u");
+ command.add(taskExecutionContext.getTenantCode());
+ }
command.add(commandInterpreter());
command.addAll(commandOptions());
command.add(commandFile);
@@ -595,4 +598,4 @@ public abstract class AbstractCommandExecutor {
public void setTaskResultString(String taskResultString) {
this.taskResultString = taskResultString;
}
-}
\ No newline at end of file
+}
From 9c3cec5bbdec2eea90e4525da9e4b915d4b5bb82 Mon Sep 17 00:00:00 2001
From: KonsonChow <32976711+KonsonChow@users.noreply.github.com>
Date: Mon, 29 Mar 2021 23:47:52 +0800
Subject: [PATCH 8/8] [DS-4891][docs] update DolphinScheduler slack invitation
url (#5167)
update DolphinScheduler slack invitation url
Co-authored-by: KonsonChow
---
README.md | 2 +-
README_zh_CN.md | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index b52e00ef1f..faa7eefb4d 100644
--- a/README.md
+++ b/README.md
@@ -87,7 +87,7 @@ We would like to express our deep gratitude to all the open-source projects used
## Community
You are very welcome to communicate with the developers and users of Dolphin Scheduler. There are two ways to find them:
-1. Join the Slack channel by [this invitation link](https://join.slack.com/t/asf-dolphinscheduler/shared_invite/zt-mzqu52gi-rCggPkSHQ0DZYkwbTxO1Gw).
+1. Join the Slack channel by [this invitation link](https://join.slack.com/t/asf-dolphinscheduler/shared_invite/zt-omtdhuio-_JISsxYhiVsltmC5h38yfw).
2. Follow the [Twitter account of Dolphin Scheduler](https://twitter.com/dolphinschedule) and get the latest news on time.
## How to Contribute
diff --git a/README_zh_CN.md b/README_zh_CN.md
index abd3d378f4..502bff55be 100644
--- a/README_zh_CN.md
+++ b/README_zh_CN.md
@@ -92,7 +92,7 @@ Dolphin Scheduler使用了很多优秀的开源项目,比如google的guava、g
## 社区
-1. 通过[该申请链接](https://join.slack.com/t/asf-dolphinscheduler/shared_invite/zt-mzqu52gi-rCggPkSHQ0DZYkwbTxO1Gw)加入slack channel
+1. 通过[该申请链接](https://join.slack.com/t/asf-dolphinscheduler/shared_invite/zt-omtdhuio-_JISsxYhiVsltmC5h38yfw)加入slack channel
2. 关注[Apache Dolphin Scheduler的Twitter账号](https://twitter.com/dolphinschedule)获取实时动态
## 版权