{"record":{"id":"011e30f2211442d6","repo":"pentaho/pentaho-kettle","slug":"loadfileinput-log-requiredfilesmissing","errorCode":"LoadFileInput.Log.RequiredFilesMissing","errorMessage":"LoadFileInput.Log.RequiredFilesMissing","messagePattern":"LoadFileInput\\.Log\\.RequiredFilesMissing","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/loadfileinput/LoadFileInput.java","lineNumber":292,"sourceCode":"        try {\n          inputStream.close();\n        } catch ( Exception e ) { /* Ignore */\n        }\n      }\n    }\n\n    return retval;\n  }\n\n  private void handleMissingFiles() throws KettleException {\n    List<FileObject> nonExistantFiles = data.files.getNonExistantFiles();\n\n    if ( !nonExistantFiles.isEmpty() ) {\n      String message = FileInputList.getRequiredFilesDescription( nonExistantFiles );\n      logError( BaseMessages.getString( PKG, \"LoadFileInput.Log.RequiredFilesTitle\" ), BaseMessages.getString(\n        PKG, \"LoadFileInput.Log.RequiredFiles\", message ) );\n\n      throw new KettleException( BaseMessages.getString( PKG, \"LoadFileInput.Log.RequiredFilesMissing\", message ) );\n    }\n\n    List<FileObject> nonAccessibleFiles = data.files.getNonAccessibleFiles();\n    if ( !nonAccessibleFiles.isEmpty() ) {\n      String message = FileInputList.getRequiredFilesDescription( nonAccessibleFiles );\n      logError( BaseMessages.getString( PKG, \"LoadFileInput.Log.RequiredFilesTitle\" ), BaseMessages.getString(\n        PKG, \"LoadFileInput.Log.RequiredNotAccessibleFiles\", message ) );\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"LoadFileInput.Log.RequiredNotAccessibleFilesMissing\", message ) );\n    }\n  }\n\n  /**\n   * Build an empty row based on the meta-data...\n   *\n   * @return\n   */\n","sourceCodeStart":274,"sourceCodeEnd":310,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/loadfileinput/LoadFileInput.java#L274-L310","documentation":"LoadFileInput.handleMissingFiles aborts step initialization when any of the configured files don't exist (nonExistantFiles not empty), throwing KettleException with a RequiredFilesMissing message listing the missing files. FailHard on missing required files means the step refuses to start rather than silently skipping.","triggerScenarios":"init() calls handleMissingFiles; data.files.getNonExistantFiles() is non-empty — configured static file paths or wildcard results point to files that don't exist at init time.","commonSituations":"Typo or wrong absolute path in the file list; variable (${Internal...} or env var) not resolved as expected; file deleted between design time and runtime; relative path resolved against a different working directory on an agent/server; files not present on a cluster node.","solutions":["Read the message — it lists exactly which files are missing.","Fix the paths in the file list (use variables relative to the runtime environment).","Ensure files are staged on the executing node (including every cluster/pentaho server node).","Verify variable substitution at runtime (log the resolved paths).","If files may legitimately be absent, adjust the step settings to tolerate missing files or pre-filter with an 'If file exists' check."],"exampleFix":"// before (config)\n// file list: /data/inbound/orders.ldif\n// after: parameterize and validate\nString dir = environmentSubstitute(\"${INBOUND_DIR}\");\nFile f = new File(dir, \"orders.ldif\");\nif (!f.exists()) {\n  throw new KettleException(\"Required file missing: \" + f.getAbsolutePath());\n}","handlingStrategy":"validation","validationCode":"for (String p : configuredPaths) {\n  File f = new File(environmentSubstitute(p));\n  if (!f.exists()) throw new KettleException(\"Required file missing at init: \" + f.getAbsolutePath());\n}","typeGuard":null,"tryCatchPattern":"try {\n  trans.execute(null);\n} catch (KettleException e) {\n  if (e.getMessage().contains(\"RequiredFiles\")) {\n    log.error(\"Stage missing files on the executing node, or fix the file list\", e);\n  }\n}","preventionTips":["Use variables for paths and verify substitution at runtime","Stage files on every execution/cluster node","Confirm files exist between design time and runtime","Pre-filter file lists so missing files are handled gracefully"],"tags":["kettle","pentaho","file-not-found","configuration","init"],"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"}