{"record":{"id":"43618b227c8fcfed","repo":"pentaho/pentaho-kettle","slug":"accessinput-log-requirednotaccessiblefilesmissing","errorCode":"AccessInput.Log.RequiredNotAccessibleFilesMissing","errorMessage":"AccessInput.Log.RequiredNotAccessibleFilesMissing","messagePattern":"AccessInput\\.Log\\.RequiredNotAccessibleFilesMissing","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/ms-access/impl/src/main/java/org/pentaho/di/trans/steps/accessinput/AccessInput.java","lineNumber":376,"sourceCode":"  }\n\n  private void handleMissingFiles() throws KettleException {\n    List<FileObject> nonExistantFiles = data.files.getNonExistantFiles();\n    if ( nonExistantFiles.size() != 0 ) {\n      String message = FileInputList.getRequiredFilesDescription( nonExistantFiles );\n      logError( BaseMessages.getString( PKG, \"AccessInput.Log.RequiredFilesTitle\" ), BaseMessages.getString(\n        PKG, \"AccessInput.Log.RequiredFiles\", message ) );\n\n      throw new KettleException( BaseMessages.getString( PKG, \"AccessInput.Log.RequiredFilesMissing\", message ) );\n    }\n\n    List<FileObject> nonAccessibleFiles = data.files.getNonAccessibleFiles();\n    if ( nonAccessibleFiles.size() != 0 ) {\n      String message = FileInputList.getRequiredFilesDescription( nonAccessibleFiles );\n      logError( BaseMessages.getString( PKG, \"AccessInput.Log.RequiredFilesTitle\" ), BaseMessages.getString(\n        PKG, \"AccessInput.Log.RequiredNotAccessibleFiles\", message ) );\n\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"AccessInput.Log.RequiredNotAccessibleFilesMissing\", message ) );\n    }\n  }\n\n  /**\n   * Build an empty row based on the meta-data...\n   *\n   * @return\n   */\n\n  private Object[] buildEmptyRow() {\n    Object[] rowData = RowDataUtil.allocateRowData( data.outputRowMeta.size() );\n\n    return rowData;\n  }\n\n  public boolean init( StepMetaInterface smi, StepDataInterface sdi ) {\n    meta = (AccessInputMeta) smi;","sourceCodeStart":358,"sourceCodeEnd":394,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/ms-access/impl/src/main/java/org/pentaho/di/trans/steps/accessinput/AccessInput.java#L358-L394","documentation":"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.","triggerScenarios":"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).","commonSituations":"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.","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."],"exampleFix":"// on the execution host, grant read access to the PDI user\nchmod o+r /data/customers.mdb && chmod o+rx /data\n// or on Windows share: grant the service account Read on both share and NTFS ACL","handlingStrategy":"validation","validationCode":"// pre-check readability of each resolved file as the run-time user\nfor ( File f : resolvedFiles ) {\n  if ( f.exists() && !f.canRead() ) {\n    throw new AccessDeniedException( f.getPath() );\n  }\n}","typeGuard":null,"tryCatchPattern":"try { trans.execute( null ); } catch ( KettleException e ) { if ( e.getMessage().contains( \"access\" ) || e.getMessage().contains( \"access\" ) ) { logError( \"Check file permissions/locks: \" + e.getMessage() ); } }","preventionTips":["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"],"tags":["kettle","ms-access","permissions","file-access","step-init"],"backgroundTag":"permission-denied","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"}