pentaho/pentaho-kettle · error · KettleException

Following required files are not accessible:

Error message

Following required files are not accessible: 

What it means

BaseFileInputStepUtils.handleMissingFiles() throws a KettleException listing all input files that exist but are not accessible (e.g. unreadable) when errors are not ignored. The step aborts because it cannot read required input files.

Solutions

  1. Grant the executing user read permission (chmod/chown or ACL) on the listed files.
  2. Run the transformation under an account with access to the file location.
  3. Check that files are not locked by another process and that the mount/share is healthy.
  4. Enable ignore-error handling for non-accessible files if continuing is acceptable.

Example fix

// before
bash: kettle transformation reads /data/in.csv owned by root, mode 600 -> not accessible
// after
chmod 644 /data/in.csv  # or chown kettle:kettle /data/in.csv
Defensive patterns

Strategy: validation

Validate before calling

for (String file : files) {
  java.io.File f = new java.io.File(file);
  if (f.exists() && !f.canRead()) {
    throw new IllegalStateException("Not accessible: " + file);
  }
}

Try / catch

try {
  trans.execute(null);
} catch (KettleException e) {
  if (e.getMessage().startsWith("Following required files are not accessible")) {
    // fix permissions or credentials, then retry
  } else { throw e; }
}

Prevention

When it happens

Trigger: Resolved input files exist but cannot be opened by the transformation process: permission denied, locked by another process, or a directory/ACL blocks read access, with 'ignore' error handling disabled.

Common situations: Files owned by another user; running the transformation under a service account lacking read permission; NFS/SMB mount issues; files held by a writer process; HDFS/VFS permission misconfiguration.

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


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/36d193a02399c17d. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/file/BaseFileInputStepUtils.java:64

          errorHandler.handleNonExistantFile( fileObject );
        }
      } else {
        throw new KettleException( "Following required files are missing: " + message );
      }
    }

    List<FileObject> nonAccessibleFiles = files.getNonAccessibleFiles();
    if ( !nonAccessibleFiles.isEmpty() ) {
      String message = FileInputList.getRequiredFilesDescription( nonAccessibleFiles );
      if ( log.isBasic() ) {
        log.logBasic( "Required files", "WARNING: Not accessible " + message );
      }
      if ( isErrorIgnored ) {
        for ( FileObject fileObject : nonAccessibleFiles ) {
          errorHandler.handleNonAccessibleFile( fileObject );
        }
      } else {
        throw new KettleException( "Following required files are not accessible: " + message );
      }
    }
  }

  /**
   * Adds <code>String</code> value meta with given name if not present and returns index
   *
   * @param rowMeta
   * @param fieldName
   * @return Index in row meta of value meta with <code>fieldName</code>
   */
  public static int addValueMeta( String stepName, RowMetaInterface rowMeta, String fieldName ) {
    ValueMetaInterface valueMeta = new ValueMetaString( fieldName );
    valueMeta.setOrigin( stepName );
    // add if doesn't exist
    int index = -1;
    if ( !rowMeta.exists( valueMeta ) ) {
      index = rowMeta.size();

View on GitHub (pinned to f3058517a1)