pentaho/pentaho-kettle · error · KettleException
AccessInput.Log.RequiredNotAccessibleFilesMissing
AccessInput.Log.RequiredNotAccessibleFilesMissing
Error message
AccessInput.Log.RequiredNotAccessibleFilesMissing
What it means
KettleException thrown by AccessInput.handleMissingFiles during step init when the listed files exist but cannot be opened/accessed by the process. It logs the non-accessible file list and throws, aborting the transformation.
Solutions
- Grant the PDI process user read permission on the file and its containing directory.
- Check for exclusive locks: close MS Access sessions and delete stale .ldb lock files on the share.
- Test access as the actual run-time user (e.g. su to the service account and cat the file) to reproduce the permission issue.
- If the file is on a network share, verify share-level and NTFS/POSIX ACLs both allow the run-time user.
Example fix
// on the execution host, grant read access to the PDI user chmod o+r /data/customers.mdb && chmod o+rx /data // or on Windows share: grant the service account Read on both share and NTFS ACL
Defensive patterns
Strategy: validation
Validate before calling
// pre-check readability of each resolved file as the run-time user
for ( File f : resolvedFiles ) {
if ( f.exists() && !f.canRead() ) {
throw new AccessDeniedException( f.getPath() );
}
} Try / catch
try { trans.execute( null ); } catch ( KettleException e ) { if ( e.getMessage().contains( "access" ) || e.getMessage().contains( "access" ) ) { logError( "Check file permissions/locks: " + e.getMessage() ); } } Prevention
- Grant the PDI service account read on files and directories
- Remove stale .ldb lock files and avoid exclusive Access sessions
- Check both share-level and filesystem ACLs
- Test access as the actual run-time user, not your own
When it happens
Trigger: init() -> handleMissingFiles() finding data.files.getNonAccessibleFiles() non-empty: file exists but the PDI user lacks read permission, the file is exclusively locked by MS Access/another process, or the VFS layer fails to open it (locked network share, permissions on the parent directory).
Common situations: Running the transformation under a service account without permissions on the share; .mdb opened in exclusive mode by another user; Access database with a stale .ldb lock file; SELinux/filesystem ACLs on Linux deployments.
Understand the failure class
Background: Permission denied / not authorized / 403 Forbidden: access-control rejections when the caller lacks the required role, grant, or ownership — this error's family across 18 libraries.
Related errors
- AccessInput.Log.RequiredFilesMissing
- Following required files are not accessible:
- YamlInput.Log.RequiredNotAccessibleFilesMissing
- AbsSecurityManager.ERROR_0005_INSUFFICIENT_PRIVELEGES
- AbsSecurityProvider.ERROR_0002_UNABLE_TO_ACCESS_IS_ALLOWED
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/43618b227c8fcfed.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/ms-access/impl/src/main/java/org/pentaho/di/trans/steps/accessinput/AccessInput.java:376
}
private void handleMissingFiles() throws KettleException {
List<FileObject> nonExistantFiles = data.files.getNonExistantFiles();
if ( nonExistantFiles.size() != 0 ) {
String message = FileInputList.getRequiredFilesDescription( nonExistantFiles );
logError( BaseMessages.getString( PKG, "AccessInput.Log.RequiredFilesTitle" ), BaseMessages.getString(
PKG, "AccessInput.Log.RequiredFiles", message ) );
throw new KettleException( BaseMessages.getString( PKG, "AccessInput.Log.RequiredFilesMissing", message ) );
}
List<FileObject> nonAccessibleFiles = data.files.getNonAccessibleFiles();
if ( nonAccessibleFiles.size() != 0 ) {
String message = FileInputList.getRequiredFilesDescription( nonAccessibleFiles );
logError( BaseMessages.getString( PKG, "AccessInput.Log.RequiredFilesTitle" ), BaseMessages.getString(
PKG, "AccessInput.Log.RequiredNotAccessibleFiles", message ) );
throw new KettleException( BaseMessages.getString(
PKG, "AccessInput.Log.RequiredNotAccessibleFilesMissing", message ) );
}
}
/**
* Build an empty row based on the meta-data...
*
* @return
*/
private Object[] buildEmptyRow() {
Object[] rowData = RowDataUtil.allocateRowData( data.outputRowMeta.size() );
return rowData;
}
public boolean init( StepMetaInterface smi, StepDataInterface sdi ) {
meta = (AccessInputMeta) smi;View on GitHub (pinned to f3058517a1)