This is an automated email from the ASF dual-hosted git repository.

wenjun pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new d42cd288ab [Fix-17520][TaskExecutor] Fix not clear task exec path when 
set development.state=false in common.properties (#17523)
d42cd288ab is described below

commit d42cd288abf23a772d947465d8a121d7d9efbf92
Author: LourierL <[email protected]>
AuthorDate: Mon Sep 29 09:43:47 2025 +0800

    [Fix-17520][TaskExecutor] Fix not clear task exec path when set 
development.state=false in common.properties (#17523)
---
 .../src/main/resources/common.properties              |  2 +-
 .../master/engine/executor/LogicTaskExecutor.java     |  5 +++++
 .../dolphinscheduler/task/executor/ITaskExecutor.java |  5 +++++
 .../container/AbstractTaskExecutorContainer.java      |  2 ++
 .../server/worker/executor/PhysicalTaskExecutor.java  | 14 ++++++++++++++
 .../worker/utils/TaskExecutionContextUtils.java       | 13 +++++++++++++
 .../worker/utils/TaskExecutionContextUtilsTest.java   | 19 +++++++++++++++++++
 7 files changed, 59 insertions(+), 1 deletion(-)

diff --git a/dolphinscheduler-common/src/main/resources/common.properties 
b/dolphinscheduler-common/src/main/resources/common.properties
index 81143ae21d..9e5adea62e 100644
--- a/dolphinscheduler-common/src/main/resources/common.properties
+++ b/dolphinscheduler-common/src/main/resources/common.properties
@@ -81,7 +81,7 @@ dolphin.scheduler.network.interface.restrict=docker0
 # network IP gets priority, default: inner outer
 #dolphin.scheduler.network.priority.strategy=default
 
-# development state
+# development state. it may delete task exec path when task finished, or keep 
it for debug reason in development
 development.state=false
 
 # If the shell process is still active after this timeout value (in seconds), 
then will use kill -9 to kill it
diff --git 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/LogicTaskExecutor.java
 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/LogicTaskExecutor.java
index 4dafabfe4d..738b36fcb1 100644
--- 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/LogicTaskExecutor.java
+++ 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/LogicTaskExecutor.java
@@ -77,6 +77,11 @@ public class LogicTaskExecutor extends AbstractTaskExecutor {
         }
     }
 
+    @Override
+    public void finalizeTask() {
+        // do nothing for now
+    }
+
     @Override
     public String toString() {
         return "LogicTaskExecutor{" +
diff --git 
a/dolphinscheduler-task-executor/src/main/java/org/apache/dolphinscheduler/task/executor/ITaskExecutor.java
 
b/dolphinscheduler-task-executor/src/main/java/org/apache/dolphinscheduler/task/executor/ITaskExecutor.java
index f62d9ab931..2dd25b8092 100644
--- 
a/dolphinscheduler-task-executor/src/main/java/org/apache/dolphinscheduler/task/executor/ITaskExecutor.java
+++ 
b/dolphinscheduler-task-executor/src/main/java/org/apache/dolphinscheduler/task/executor/ITaskExecutor.java
@@ -69,6 +69,11 @@ public interface ITaskExecutor extends 
ITaskExecutorStateTracker {
      */
     void kill();
 
+    /**
+     * finalize the task executor.
+     */
+    void finalizeTask();
+
     /**
      * Get the EventBus belongs to the task executor.
      */
diff --git 
a/dolphinscheduler-task-executor/src/main/java/org/apache/dolphinscheduler/task/executor/container/AbstractTaskExecutorContainer.java
 
b/dolphinscheduler-task-executor/src/main/java/org/apache/dolphinscheduler/task/executor/container/AbstractTaskExecutorContainer.java
index fd876434e4..4eac0e2cd0 100644
--- 
a/dolphinscheduler-task-executor/src/main/java/org/apache/dolphinscheduler/task/executor/container/AbstractTaskExecutorContainer.java
+++ 
b/dolphinscheduler-task-executor/src/main/java/org/apache/dolphinscheduler/task/executor/container/AbstractTaskExecutorContainer.java
@@ -98,6 +98,8 @@ public abstract class AbstractTaskExecutorContainer 
implements ITaskExecutorCont
         }
         log.info(FINALIZE_SESSION_MARKER, FINALIZE_SESSION_MARKER.toString());
         pushTaskExecutorLogToRemote(taskExecutor);
+        // [Fix-17520]
+        taskExecutor.finalizeTask();
     }
 
     @Override
diff --git 
a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/executor/PhysicalTaskExecutor.java
 
b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/executor/PhysicalTaskExecutor.java
index d6139b2019..1d4c7b038b 100644
--- 
a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/executor/PhysicalTaskExecutor.java
+++ 
b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/executor/PhysicalTaskExecutor.java
@@ -17,7 +17,9 @@
 
 package org.apache.dolphinscheduler.server.worker.executor;
 
+import org.apache.dolphinscheduler.common.constants.Constants;
 import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.common.utils.PropertyUtils;
 import org.apache.dolphinscheduler.plugin.storage.api.StorageOperator;
 import org.apache.dolphinscheduler.plugin.task.api.AbstractTask;
 import org.apache.dolphinscheduler.plugin.task.api.TaskCallBack;
@@ -104,6 +106,18 @@ public class PhysicalTaskExecutor extends 
AbstractTaskExecutor {
         }
     }
 
+    @Override
+    public void finalizeTask() {
+        clearTaskInstanceWorkingDirectoryIfNeeded();
+    }
+
+    private void clearTaskInstanceWorkingDirectoryIfNeeded() {
+        boolean isDevelopment = 
PropertyUtils.getBoolean(Constants.DEVELOPMENT_STATE, true);
+        if (!isDevelopment) {
+            
TaskExecutionContextUtils.clearTaskInstanceWorkingDirectory(taskExecutionContext);
+        }
+    }
+
     @Override
     protected void initializeTaskContext() {
         super.initializeTaskContext();
diff --git 
a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/utils/TaskExecutionContextUtils.java
 
b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/utils/TaskExecutionContextUtils.java
index 79536bb78b..bdcbdbedc0 100644
--- 
a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/utils/TaskExecutionContextUtils.java
+++ 
b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/utils/TaskExecutionContextUtils.java
@@ -29,6 +29,7 @@ import 
org.apache.dolphinscheduler.plugin.task.api.resource.ResourceContext;
 import org.apache.dolphinscheduler.server.worker.metrics.WorkerServerMetrics;
 
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 
 import java.io.File;
 import java.nio.file.Files;
@@ -108,4 +109,16 @@ public class TaskExecutionContextUtils {
         return resourceContext;
     }
 
+    public static void clearTaskInstanceWorkingDirectory(TaskExecutionContext 
taskExecutionContext) {
+        final String execPath = taskExecutionContext.getExecutePath();
+        try {
+            if (StringUtils.isNotEmpty(execPath)) {
+                FileUtils.deleteFile(execPath);
+                log.info("Deleted task exec directory: {}", execPath);
+            }
+        } catch (Exception e) {
+            log.warn("Failed to delete task exec directory.", e);
+        }
+    }
+
 }
diff --git 
a/dolphinscheduler-worker/src/test/java/org/apache/dolphinscheduler/server/worker/utils/TaskExecutionContextUtilsTest.java
 
b/dolphinscheduler-worker/src/test/java/org/apache/dolphinscheduler/server/worker/utils/TaskExecutionContextUtilsTest.java
index 3fa08e33b1..36db66854d 100644
--- 
a/dolphinscheduler-worker/src/test/java/org/apache/dolphinscheduler/server/worker/utils/TaskExecutionContextUtilsTest.java
+++ 
b/dolphinscheduler-worker/src/test/java/org/apache/dolphinscheduler/server/worker/utils/TaskExecutionContextUtilsTest.java
@@ -55,4 +55,23 @@ class TaskExecutionContextUtilsTest {
             FileUtils.deleteFile(taskWorkingDirectory);
         }
     }
+
+    @Test
+    void clearTaskInstanceWorkingDirectory() throws IOException {
+        TaskExecutionContext taskExecutionContext = new TaskExecutionContext();
+        taskExecutionContext.setTaskInstanceId(1);
+
+        
TaskExecutionContextUtils.createTaskInstanceWorkingDirectory(taskExecutionContext);
+        String taskWorkingDirectory =
+                
FileUtils.getTaskInstanceWorkingDirectory(taskExecutionContext.getTaskInstanceId());
+        Files.createFile(Paths.get(taskWorkingDirectory, "1.sh"));
+
+        // Test delete the working directory
+        
TaskExecutionContextUtils.clearTaskInstanceWorkingDirectory(taskExecutionContext);
+        Assertions.assertFalse(Files.exists(Paths.get(taskWorkingDirectory)));
+
+        // Test do nothing if working directory is empty
+        TaskExecutionContext emptyExecPathContext = new TaskExecutionContext();
+        
TaskExecutionContextUtils.clearTaskInstanceWorkingDirectory(emptyExecPathContext);
+    }
 }

Reply via email to