{"record":{"id":"cd36d57817afe7ba","repo":"pentaho/pentaho-kettle","slug":"yamlinput-log-requiredfilesmissing","errorCode":null,"errorMessage":"YamlInput.Log.RequiredFilesMissing","messagePattern":"YamlInput\\.Log\\.RequiredFilesMissing","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":64,"sourceCode":"  private static Class<?> PKG = YamlInputMeta.class; // for i18n purposes, needed by Translator2!!\n\n  private YamlInputMeta meta;\n\n  private YamlInputData data;\n\n  public YamlInput( StepMeta stepMeta, StepDataInterface stepDataInterface, int copyNr, TransMeta transMeta,\n    Trans trans ) {\n    super( stepMeta, stepDataInterface, copyNr, transMeta, trans );\n  }\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","sourceCodeStart":46,"sourceCodeEnd":82,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/yaml-input/impl/src/main/java/org/pentaho/di/trans/steps/yamlinput/YamlInput.java#L46-L82","documentation":"YamlInput throws this KettleException during handleMissingFiles when one or more files configured for the YAML Input step do not exist on disk. The step resolves its file list via FileInputList and refuses to run with missing required files, because silent skipping could produce empty or misleading transformation output.","triggerScenarios":"processRow -> handleMissingFiles is called at step initialization; data.files.getNonExistantFiles() returns a non-empty list, meaning at least one configured filename/glob resolved to a non-existent FileObject, and the file was marked required.","commonSituations":"Typo in the filename or directory path, file deleted or renamed between transformation design and execution, relative paths that resolve differently on the runtime agent, or wildcard patterns matching nothing.","solutions":["Verify each configured file exists at the path the executing runtime sees (ls/check the path).","Correct the filename/directory in the YAML Input step's File tab, or fix wildcard patterns to match existing files.","Use absolute paths or ${Internal.Transformation.Filename.Directory} variables so paths resolve relative to the transformation location.","If missing files are acceptable, ensure 'Do not fail if no file' semantics apply and change file 'Required' flag to No for optional files."],"exampleFix":"// before: transformation references /data/input.yaml that was moved\n// after: use a variable anchored to the transformation directory\nfileName = \"${Internal.Transformation.Filename.Directory}/input.yaml\";","handlingStrategy":"validation","validationCode":"// before running the transformation\nfor (String f : fileNames) {\n  File file = new File(resolveVariables(f));\n  if (!file.exists()) throw new IllegalStateException(\"Required file missing: \" + file);\n}","typeGuard":null,"tryCatchPattern":"// catch KettleException and surface the missing-file list from the log message\ntry { trans.execute(...); } catch (KettleException e) {\n  if (e.getMessage().contains(\"RequiredFilesMissing\")) { alertOps(e.getMessage()); }\n  throw e;\n}","preventionTips":["Use variables anchored to the transformation directory instead of absolute host-specific paths.","Add a pre-flight job entry ('File exists' / 'Check if file exists') before the transformation.","Set 'Required' = No for genuinely optional files."],"tags":["file-not-found","kettle","step-configuration"],"backgroundTag":"file-not-found","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"}