pentaho/pentaho-kettle · error · KettleException
FileErrorHandlerMissingFiles.Exception.CouldNotCreateNonAccessibleFile
FileErrorHandlerMissingFiles.Exception.CouldNotCreateNonAccessibleFile
Error message
FileErrorHandlerMissingFiles.Exception.CouldNotCreateNonAccessibleFile
What it means
KettleException thrown by FileErrorHandlerMissingFiles.handleNonAccessibleFile() when logging a file that exists but cannot be accessed (opened/read) to the 'non-accessible files' lineage file fails. Mirrors handleNonExistantFile but records THIS_FILE_WAS_NOT_ACCESSIBLE.
Solutions
- Check the chained cause to distinguish lineage-write failure from the original access problem
- Fix permissions on both the input file (read access) and the lineage directory (write access)
- Check for file locks or security policies (SELinux) blocking access
- Point lineage files to a local writable directory and re-run
Example fix
// before: no read permission on input chmod check: -rw------- data.csv, kettle runs as other user // after chmod 644 data.csv; and ensure lineage dir is writable
Defensive patterns
Strategy: validation
Validate before calling
// Pre-check both file access and lineage writability
FileObject inFile = fsManager.resolveFile(inputUri);
if (inFile.exists() && !inFile.isReadable()) {
log.warn("Input file not accessible: " + inputUri);
}
FileObject lineageDir = fsManager.resolveFile(lineageDirUri);
if (!lineageDir.exists() || !lineageDir.isWriteable()) {
throw new IllegalStateException("Lineage dir unusable: " + lineageDirUri);
} Try / catch
try {
errorHandler.handleNonAccessibleFile(file);
} catch (KettleException e) {
log.error("Cannot record inaccessible file " + file.getName().getURI()
+ ": " + e.getMessage(), e);
throw e;
} Prevention
- Grant read access on input files to the Kettle process user
- Ensure lineage directory is writable; avoid mixing restricted and lineage paths on the same mount
- Check for file locks / SELinux denials when files exist but can't open
When it happens
Trigger: handleNonAccessibleFile(file) invoked when an input file can't be opened by the step; then writing the lineage record throws — lineage file creation/write fails (permissions, path invalid, disk full).
Common situations: Input files with OS-level permission problems (process user lacks read access) combined with a lineage directory that's also misconfigured; files locked by another process; SELinux/AppArmor restrictions.
Understand the failure class
Background: "failed to write file", "Could not save figure", "Error saving remote file" — file write failed: causes and fixes across languages and libraries — this error's family across 38 libraries.
Related errors
- AbstractFileErrorHandler.Exception.CouldNotCreateFileErrorHandlerForFile
- FileErrorHandlerContentLineNumber.Exception.CouldNotCreateWriteLine
- FileErrorHandlerMissingFiles.Exception.CouldNotCreateNonExistantFile
- Following required files are not accessible:
- JsonOutput.Error.OpenNewFile
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/12552f72cfc37fd0.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/step/errorhandling/FileErrorHandlerMissingFiles.java:62
public void handleNonExistantFile( FileObject file ) throws KettleException {
handleFile( file );
try {
getWriter( NO_PARTS ).write( THIS_FILE_DOES_NOT_EXIST );
getWriter( NO_PARTS ).write( Const.CR );
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString(
PKG, "FileErrorHandlerMissingFiles.Exception.CouldNotCreateNonExistantFile" )
+ file.getName().getURI(), e );
}
}
public void handleNonAccessibleFile( FileObject file ) throws KettleException {
handleFile( file );
try {
getWriter( NO_PARTS ).write( THIS_FILE_WAS_NOT_ACCESSIBLE );
getWriter( NO_PARTS ).write( Const.CR );
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString(
PKG, "FileErrorHandlerMissingFiles.Exception.CouldNotCreateNonAccessibleFile" )
+ file.getName().getURI(), e );
}
}
}
View on GitHub (pinned to f3058517a1)