{"record":{"id":"86c0a04ae7f2bc0e","repo":"pentaho/pentaho-kettle","slug":"propertyinput-log-requiredfilesmissing","errorCode":null,"errorMessage":"PropertyInput.Log.RequiredFilesMissing","messagePattern":"PropertyInput\\.Log\\.RequiredFilesMissing","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/propertyinput/PropertyInput.java","lineNumber":121,"sourceCode":"      } else {\n        logError( BaseMessages.getString( PKG, \"PropertyInput.ErrorInStepRunning\", e.getMessage() ) );\n        setErrors( 1 );\n        stopAll();\n        setOutputDone(); // signal end to receiver(s)\n        return false;\n      }\n    }\n    return true;\n  }\n\n  private void handleMissingFiles() throws KettleException {\n    List<FileObject> nonExistantFiles = data.files.getNonExistantFiles();\n    if ( !nonExistantFiles.isEmpty() ) {\n      String message = FileInputList.getRequiredFilesDescription( nonExistantFiles );\n      logError( BaseMessages.getString( PKG, \"PropertyInput.Log.RequiredFilesTitle\" ), BaseMessages.getString(\n        PKG, \"PropertyInput.Log.RequiredFiles\", message ) );\n\n      throw new KettleException( BaseMessages.getString( PKG, \"PropertyInput.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, \"PropertyInput.Log.RequiredFilesTitle\" ), BaseMessages.getString(\n        PKG, \"PropertyInput.Log.RequiredNotAccessibleFiles\", message ) );\n\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"PropertyInput.Log.RequiredNotAccessibleFilesMissing\", message ) );\n    }\n  }\n\n  private Object[] getOneRow() throws KettleException {\n    try {\n      if ( meta.isFileField() ) {\n        while ( ( data.readrow == null )\n          || ( ( data.propfiles && !data.propIt.hasNext() ) || ( !data.propfiles && !data.iniIt.hasNext() ) ) ) {","sourceCodeStart":103,"sourceCodeEnd":139,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/propertyinput/PropertyInput.java#L103-L139","documentation":"Message key PropertyInput.Log.RequiredFilesMissing raised in handleMissingFiles (called from processRow): one or more files marked as required in the file list do not exist; the message includes a description of the missing files and the step refuses to run with an incomplete input set.","triggerScenarios":"Files configured in the step (or matched by wildcard) that are absent on disk/VFS at execution time, discovered when processRow calls handleMissingFiles after the file list is built.","commonSituations":"Files deleted or moved between designing and running the transformation; wrong environment (dev vs prod paths); scheduled job runs before upstream file generation finishes; typo in path.","solutions":["Create or restore the missing files at the configured paths before running","Fix the filenames/paths in the step dialog to match the actual files","Ensure the upstream process that generates the files completes first (dependency ordering)","If missing files are acceptable, uncheck 'Fail on missing files'/enable 'Ignore missing files' in the step settings"],"exampleFix":"// before: fail on absent file\n// /data/app.properties does not exist -> KettleException\n// after: check existence first in a prior step\n// use 'Check if file exists' (FileExists) step or Job entry:\nif (new java.io.File(\"/data/app.properties\").exists()) { runTransform(); } else { logError(\"file missing\"); }","handlingStrategy":"validation","validationCode":"for (String name : meta.getFilePaths(transMeta.getBowl(), null)) {\n  if (!new java.io.File(name).exists()) {\n    logError(\"Missing required file: \" + name);\n  }\n}","typeGuard":"java.util.List<FileObject> missing = files.getNonExistantFiles();\nboolean allPresent = missing.isEmpty();","tryCatchPattern":"try {\n  transformation.execute(params);\n} catch (KettleException e) {\n  if (e.getMessage() != null && e.getMessage().contains(\"missing\")) {\n    // alert upstream producer / retry later\n  } else { throw e; }\n}","preventionTips":["Order the job so files are generated before the transformation runs","Use stable, environment-resolved paths (variables/parameters)","Add a 'Check if file exists' or wait-for-file step upstream","Enable 'Ignore missing file?' only when absence is acceptable"],"tags":["kettle","file-input","file-not-found"],"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"}