{"record":{"id":"c35b5c6b3e0d86fa","repo":"pentaho/pentaho-kettle","slug":"yamlinput-log-requirednotaccessiblefilesmissing","errorCode":null,"errorMessage":"YamlInput.Log.RequiredNotAccessibleFilesMissing","messagePattern":"YamlInput\\.Log\\.RequiredNotAccessibleFilesMissing","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/yaml-input/impl/src/main/java/org/pentaho/di/trans/steps/yamlinput/YamlInput.java","lineNumber":73,"sourceCode":"  }\n\n  private void handleMissingFiles() throws KettleException {\n    List<FileObject> nonExistantFiles = data.files.getNonExistantFiles();\n    if ( nonExistantFiles.size() != 0 ) {\n      String message = FileInputList.getRequiredFilesDescription( nonExistantFiles );\n      logError( BaseMessages.getString( PKG, \"YamlInput.Log.RequiredFilesTitle\" ), BaseMessages.getString(\n        PKG, \"YamlInput.Log.RequiredFiles\", message ) );\n\n      throw new KettleException( BaseMessages.getString( PKG, \"YamlInput.Log.RequiredFilesMissing\", message ) );\n    }\n\n    List<FileObject> nonAccessibleFiles = data.files.getNonAccessibleFiles();\n    if ( nonAccessibleFiles.size() != 0 ) {\n      String message = FileInputList.getRequiredFilesDescription( nonAccessibleFiles );\n      logError( BaseMessages.getString( PKG, \"YamlInput.Log.RequiredFilesTitle\" ), BaseMessages.getString(\n        PKG, \"YamlInput.Log.RequiredNotAccessibleFiles\", message ) );\n\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"YamlInput.Log.RequiredNotAccessibleFilesMissing\", message ) );\n    }\n  }\n\n  private boolean readNextString() {\n\n    try {\n      data.readrow = getRow(); // Grab another row ...\n\n      if ( data.readrow == null ) {\n        // finished processing!\n        if ( log.isDetailed() ) {\n          logDetailed( BaseMessages.getString( PKG, \"YamlInput.Log.FinishedProcessing\" ) );\n        }\n        return false;\n      }\n\n      if ( first ) {","sourceCodeStart":55,"sourceCodeEnd":91,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/yaml-input/impl/src/main/java/org/pentaho/di/trans/steps/yamlinput/YamlInput.java#L55-L91","documentation":"YamlInput throws this KettleException in handleMissingFiles when files exist but are not accessible (cannot be opened/read by the process). FileInputList reports them via getNonAccessibleFiles(), and the step fails fast rather than reading a partial file set.","triggerScenarios":"processRow -> handleMissingFiles; data.files.getNonAccessibleFiles() is non-empty, i.e. the FileObject exists but can't be read (no read permission, locked by another process, or a directory instead of a file).","commonSituations":"Running the transformation/PDI server under a service account lacking read permission on the file, files encrypted or locked by another application on Windows, path points to a directory, or SELinux/ACL restrictions on Linux.","solutions":["Check and grant read permission on the listed files for the user running the JVM (chmod/chown or ACLs).","Confirm the path points to a regular file, not a directory.","Close any process holding an exclusive lock on the file.","If the file is optional, set its 'Required' flag to No so the step skips it instead of failing."],"exampleFix":"// before: bash\n# ls -l /data/input.yaml  -> -rw------- root root\n// after: run as the right user or open permissions\nchmod 644 /data/input.yaml   # or run PDI as a user in the file's group","handlingStrategy":"validation","validationCode":"// pre-flight accessibility check as the same user that runs PDI\nFile f = new File(path);\nif (!f.canRead() || f.isDirectory()) throw new IllegalStateException(\"Not readable: \" + path);","typeGuard":null,"tryCatchPattern":"try { trans.execute(...); } catch (KettleException e) {\n  if (e.getMessage().contains(\"RequiredNotAccessibleFiles\")) { fixPermissionsFromLog(e.getMessage()); }\n  throw e;\n}","preventionTips":["Run the PDI/JVM service account with read access to all input directories.","Check permissions after deploys/OS migration; include file access in smoke tests.","Avoid pointing steps at directories or locked files."],"tags":["permissions","file-access","kettle"],"backgroundTag":"permission-denied","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}