pentaho/pentaho-kettle · error · KettleException
PropertyInput.Log.RequiredFilesMissing
Error message
PropertyInput.Log.RequiredFilesMissing
What it means
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.
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
Example fix
// before: fail on absent file
// /data/app.properties does not exist -> KettleException
// after: check existence first in a prior step
// use 'Check if file exists' (FileExists) step or Job entry:
if (new java.io.File("/data/app.properties").exists()) { runTransform(); } else { logError("file missing"); } Defensive patterns
Strategy: validation
Validate before calling
for (String name : meta.getFilePaths(transMeta.getBowl(), null)) {
if (!new java.io.File(name).exists()) {
logError("Missing required file: " + name);
}
} Type guard
java.util.List<FileObject> missing = files.getNonExistantFiles(); boolean allPresent = missing.isEmpty();
Try / catch
try {
transformation.execute(params);
} catch (KettleException e) {
if (e.getMessage() != null && e.getMessage().contains("missing")) {
// alert upstream producer / retry later
} else { throw e; }
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Understand the failure class
Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.
Related errors
- AccessInput.Log.RequiredFilesMissing
- ChangeFileEncoding.Error.SourceFileNotExists
- Error reading DBF file
- Error retrieving command string
- ExecSQLRow.Log.EmptySQLFromFile
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/86c0a04ae7f2bc0e.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/propertyinput/PropertyInput.java:121
} else {
logError( BaseMessages.getString( PKG, "PropertyInput.ErrorInStepRunning", e.getMessage() ) );
setErrors( 1 );
stopAll();
setOutputDone(); // signal end to receiver(s)
return false;
}
}
return true;
}
private void handleMissingFiles() throws KettleException {
List<FileObject> nonExistantFiles = data.files.getNonExistantFiles();
if ( !nonExistantFiles.isEmpty() ) {
String message = FileInputList.getRequiredFilesDescription( nonExistantFiles );
logError( BaseMessages.getString( PKG, "PropertyInput.Log.RequiredFilesTitle" ), BaseMessages.getString(
PKG, "PropertyInput.Log.RequiredFiles", message ) );
throw new KettleException( BaseMessages.getString( PKG, "PropertyInput.Log.RequiredFilesMissing", message ) );
}
List<FileObject> nonAccessibleFiles = data.files.getNonAccessibleFiles();
if ( !nonAccessibleFiles.isEmpty() ) {
String message = FileInputList.getRequiredFilesDescription( nonAccessibleFiles );
logError( BaseMessages.getString( PKG, "PropertyInput.Log.RequiredFilesTitle" ), BaseMessages.getString(
PKG, "PropertyInput.Log.RequiredNotAccessibleFiles", message ) );
throw new KettleException( BaseMessages.getString(
PKG, "PropertyInput.Log.RequiredNotAccessibleFilesMissing", message ) );
}
}
private Object[] getOneRow() throws KettleException {
try {
if ( meta.isFileField() ) {
while ( ( data.readrow == null )
|| ( ( data.propfiles && !data.propIt.hasNext() ) || ( !data.propfiles && !data.iniIt.hasNext() ) ) ) {View on GitHub (pinned to f3058517a1)