{"record":{"id":"4eb96f69a466df37","repo":"apache/dolphinscheduler","slug":"cannot-create-taskinstance-workingdirectory","errorCode":null,"errorMessage":"Cannot create TaskInstance WorkingDirectory: ","messagePattern":"Cannot create TaskInstance WorkingDirectory: ","errorType":"exception","errorClass":"TaskException","httpStatus":null,"severity":"error","filePath":"dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/utils/TaskExecutionContextUtils.java","lineNumber":60,"sourceCode":"public class TaskExecutionContextUtils {\n\n    public static void createTaskInstanceWorkingDirectory(TaskExecutionContext taskExecutionContext) throws TaskException {\n        // local execute path\n        String taskInstanceWorkingDirectory =\n                FileUtils.getTaskInstanceWorkingDirectory(taskExecutionContext.getTaskInstanceId());\n        try {\n            if (new File(taskInstanceWorkingDirectory).exists()) {\n                FileUtils.deleteFile(taskInstanceWorkingDirectory);\n                log.warn(\"The TaskInstance WorkingDirectory: {} is exist, will recreate again\",\n                        taskInstanceWorkingDirectory);\n            }\n\n            FileUtils.createDirectoryWithPermission(Paths.get(taskInstanceWorkingDirectory), FileUtils.PERMISSION_775);\n\n            taskExecutionContext.setExecutePath(taskInstanceWorkingDirectory);\n            taskExecutionContext.setAppInfoPath(FileUtils.getAppInfoPath(taskInstanceWorkingDirectory));\n        } catch (Throwable ex) {\n            throw new TaskException(\n                    \"Cannot create TaskInstance WorkingDirectory: \" + taskInstanceWorkingDirectory + \" failed\", ex);\n        }\n    }\n\n    public static ResourceContext downloadResourcesIfNeeded(TaskChannel taskChannel,\n                                                            StorageOperator storageOperator,\n                                                            TaskExecutionContext taskExecutionContext) {\n        AbstractParameters abstractParameters = taskChannel.parseParameters(taskExecutionContext.getTaskParams());\n\n        List<ResourceInfo> resourceFilesList = abstractParameters.getResourceFilesList();\n        if (CollectionUtils.isEmpty(resourceFilesList)) {\n            log.debug(\"There is no resource file need to download\");\n            return new ResourceContext();\n        }\n\n        ResourceContext resourceContext = new ResourceContext();\n        String taskWorkingDirectory = taskExecutionContext.getExecutePath();\n","sourceCodeStart":42,"sourceCodeEnd":78,"githubUrl":"https://github.com/apache/dolphinscheduler/blob/02eac45a1b6676e639fcbfb4be2243de5771b05d/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/utils/TaskExecutionContextUtils.java#L42-L78","documentation":"createTaskInstanceWorkingDirectory throws TaskException when the per-task working directory cannot be created with 775 permission. FileUtils.createDirectoryWithPermission failed for any reason (I/O, permission, path issues), aborting task execution on the worker.","triggerScenarios":"Worker executes a task; building Paths.get(taskInstanceWorkingDirectory) or FileUtils.createDirectoryWithPermission(..., PERMISSION_775) throws (parent dir missing/unwritable, filesystem full, invalid path characters).","commonSituations":"Worker process runs as a user without write access to the task execute base directory; disk full; NFS/permission problems; leftover conflicting directory; Linux permission/umask preventing 775 creation.","solutions":["Check the chained cause for the underlying mkdir/Files.createDirectory failure reason.","Verify the worker user can write to the task execute base directory (execute.path) and that the disk is not full.","Remove stale/conflicting directories with the same task-instance path and retry the task.","Ensure the OS tenant user and worker process user have adequate umask/permissions to create 775 directories."],"exampleFix":"// before\n// execute base dir owned by root, worker runs as 'ds'\ndrwxr-x------ root root /opt/dolphinscheduler/exec\n// after\ncd /opt/dolphinscheduler && chown -R ds:dolphinscheduler exec && chmod 775 exec","handlingStrategy":"validation","validationCode":"// pre-check on worker before submitting/executing tasks\nPath base = Paths.get(executeBaseDir);\nif (!Files.isDirectory(base)) throw new IllegalStateException(\"missing \" + base);\nif (!Files.isWritable(base)) throw new IllegalStateException(\"not writable: \" + base);\nif (Files.getUsableSpace(base) < minFreeBytes) throw new IllegalStateException(\"low disk\");","typeGuard":null,"tryCatchPattern":"try { TaskExecutionContextUtils.createTaskInstanceWorkingDirectory(ctx); } catch (TaskException e) { log.error(\"workdir creation failed for {}\", ctx.getExecutePath(), e.getCause()); }","preventionTips":["Ensure the worker user owns the execute base directory","Monitor disk usage on workers","Clean stale task directories periodically","Use local (not flaky NFS) storage for execute paths"],"tags":["filesystem","directory","worker","permissions"],"backgroundTag":"file-write-failed","analyzedSha":"02eac45a1b6676e639fcbfb4be2243de5771b05d","analyzedAt":"2026-09-06T17:43:00.555Z","contentChangedAt":"2026-09-06T17:43:00.555Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}