{"record":{"id":"9eaf6fe95003109a","repo":"apache/dolphinscheduler","slug":"thr-resource-is-not-exists-resourceabsolutepath","errorCode":null,"errorMessage":"Thr resource is not exists: ${resourceAbsolutePath}","messagePattern":"Thr resource is not exists: (.+?)","errorType":"validation","errorClass":"ServiceException","httpStatus":null,"severity":"error","filePath":"dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/validator/resource/AbstractResourceValidator.java","lineNumber":89,"sourceCode":"        }\n    }\n\n    public void exceptionFileContentInvalidated(String fileContent) {\n        if (StringUtils.isEmpty(fileContent)) {\n            throw new ServiceException(\"The file content is null\");\n        }\n    }\n\n    public void exceptionFileContentCannotFetch(String fileAbsolutePath) {\n        String fileExtension = Files.getFileExtension(fileAbsolutePath);\n        if (!FILE_SUFFIXES_WHICH_CAN_FETCH_CONTENT.contains(fileExtension)) {\n            throw new ServiceException(\"The file type: \" + fileExtension + \" cannot be fetched\");\n        }\n    }\n\n    public void exceptionResourceNotExists(String resourceAbsolutePath) {\n        if (!storageOperator.exists(resourceAbsolutePath)) {\n            throw new ServiceException(\"Thr resource is not exists: \" + resourceAbsolutePath);\n        }\n    }\n\n    public void exceptionResourceExists(String resourceAbsolutePath) {\n        if (storageOperator.exists(resourceAbsolutePath)) {\n            throw new ServiceException(\"The resource is already exist: \" + resourceAbsolutePath);\n        }\n    }\n\n    public void exceptionResourceIsNotDirectory(String resourceAbsolutePath) {\n        if (StringUtils.isNotEmpty(Files.getFileExtension(resourceAbsolutePath))) {\n            throw new ServiceException(\"The path is not a directory: \" + resourceAbsolutePath);\n        }\n    }\n\n    public void exceptionResourceIsNotFile(String fileAbsolutePath) {\n        if (StringUtils.isEmpty(Files.getFileExtension(fileAbsolutePath))) {\n            throw new ServiceException(\"The path is not a file: \" + fileAbsolutePath);","sourceCodeStart":71,"sourceCodeEnd":107,"githubUrl":"https://github.com/apache/dolphinscheduler/blob/02eac45a1b6676e639fcbfb4be2243de5771b05d/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/validator/resource/AbstractResourceValidator.java#L71-L107","documentation":"AbstractResourceValidator.exceptionResourceNotExists throws this ServiceException when the storage operator reports that no file or directory exists at the given absolute resource path. It is a pre-flight guard used by resource validators before read/write operations. Note the typo 'Thr' in the message text.","triggerScenarios":"Calling any resource API (read file, update, delete, download) whose validator invokes exceptionResourceNotExists with a path that was deleted by another user, mistyped, or never uploaded to the configured storage (HDFS/S3/local).","commonSituations":"Resource deleted from storage out-of-band while the UI still lists it; wrong tenantcode in path; storage backend switched (e.g. from local to HDFS) without migrating data; case-sensitivity mismatch on object stores.","solutions":["Verify the resource exists in the configured storage backend at the exact absolute path shown in the message.","Re-upload or recreate the resource via the Resources UI/API so the path is populated.","Check dolphinscheduler resource storage configuration (resource.storage.type and base path) points at the backend that actually holds the file.","Refresh the resource list; stale UI entries pointing at deleted files should be removed."],"exampleFix":"// before: assuming a listed resource still exists\nresourceService.readResource(path, skipLineNum, limit);\n// after: check existence first\nif (!storageOperator.exists(path)) {\n    // re-upload or surface a friendly 'resource was deleted' message\n}","handlingStrategy":"validation","validationCode":"if (!storageOperator.exists(absolutePath)) { throw new IllegalStateException(\"Resource missing: \" + absolutePath); }","typeGuard":null,"tryCatchPattern":"try { validator.exceptionResourceNotExists(path); } catch (ServiceException e) { if (e.getMessage().contains(\"is not exists\")) { /* re-upload or surface friendly message */ } else { throw e; } }","preventionTips":["Check storageOperator.exists(path) before any read/update/delete call.","Keep resource deletion and UI listing in sync; refresh after deletes.","Use the same storage configuration across all API clients so paths resolve consistently."],"tags":["resource","storage","file-not-found","dolphinscheduler"],"backgroundTag":"file-not-found","analyzedSha":"02eac45a1b6676e639fcbfb4be2243de5771b05d","analyzedAt":"2026-09-06T17:43:00.555Z","contentChangedAt":"2026-09-06T17:43:00.555Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}