pentaho/pentaho-kettle · error · KettleException
Unable to get list of jobs in folder with id : +…
Error message
Unable to get list of jobs in folder with id : + id_directory
What it means
KettleFileRepository.getJobObjects() wraps any failure while listing job files in a repository directory in this KettleException. The file repository stores jobs as .kjb files on disk; the message includes the directory ObjectId whose listing failed. The original cause (IO error, VFS failure, invalid directory id) is attached as the cause.
Solutions
- Check the cause stack trace (getCause()) to see the underlying VFS/IO error
- Verify the base directory configured for the file repository exists and is readable
- Reload the repository directory tree and re-resolve the directory ObjectId instead of using a cached id
- Check filesystem permissions on the repository folder
Example fix
// before
List<RepositoryElementMetaInterface> jobs = repo.getJobObjects(staleDirId);
// after
RepositoryDirectoryInterface dir = repo.loadRepositoryDirectoryTree().findDirectory("/production");
if (dir != null) {
List<RepositoryElementMetaInterface> jobs = repo.getJobObjects(dir.getObjectId());
} Defensive patterns
Strategy: try-catch
Validate before calling
RepositoryDirectoryInterface dir = repo.loadRepositoryDirectoryTree().findDirectory("/production");
if (dir == null) throw new IllegalStateException("Directory does not exist; cannot list jobs"); Try / catch
try {
List<RepositoryElementMetaInterface> jobs = repo.getJobObjects(dirId);
} catch (KettleException e) {
log.error("Job listing failed for dir " + dirId, e); // inspect e.getCause()
} Prevention
- Always resolve directory ids from a freshly loaded directory tree
- Verify the repository base directory exists and is readable at startup
- Never cache ObjectIds across repository reconnections
When it happens
Trigger: Calling getJobObjects(ObjectId id_directory) when the directory id does not resolve to a valid path on disk, the base directory is unreadable, or KettleVFS cannot list the folder's contents.
Common situations: Repository base directory moved, renamed, or deleted while the repository is open; incorrect base_directory configured in the repository connection settings; permissions changed on the folder; stale directory ObjectId passed after the tree changed.
Understand the failure class
Background: "failed to read file", EACCES, ENOENT and "could not read <path>" errors: when a program can't read a file from disk — this error's family across 49 libraries.
Related errors
- Unable to rename object with ID [ + id + ] to [ + newName +…
- AbsSecurityProvider.ERROR_0002_UNABLE_TO_ACCESS_IS_ALLOWED
- AccessInputMeta.Exception.ErrorReadingRepository
- AddSequenceMeta.Exception.UnableToReadStepInfo
- AddSequenceMeta.Exception.UnableToSaveStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/d9b1f293510d14db.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/repository/filerep/KettleFileRepository.java:1076
if ( !child.isHidden() || !repositoryMeta.isHidingHiddenFiles() ) {
String name = child.getName().getBaseName();
if ( name.endsWith( EXT_JOB ) ) {
String jobName = name.substring( 0, name.length() - 4 );
ObjectId id = new StringObjectId( calcObjectId( directory, jobName, EXT_JOB ) );
Date date = new Date( child.getContent().getLastModifiedTime() );
list.add( new RepositoryObject(
id, jobName, directory, "-", date, RepositoryObjectType.JOB, "", false ) );
}
}
}
}
return list;
} catch ( Exception e ) {
throw new KettleException( "Unable to get list of jobs in folder with id : " + id_directory, e );
}
}
public int getNrSubDirectories( ObjectId id_directory ) throws KettleException {
return 0;
}
@Override
public SlaveServer loadSlaveServer( ObjectId id_slave_server, String versionName ) throws KettleException {
try {
return new SlaveServer( loadNodeFromXML( id_slave_server, SlaveServer.XML_TAG ) );
} catch ( Exception e ) {
throw new KettleException( "Unable to load slave server from the file repository", e );
}
}
@OverrideView on GitHub (pinned to f3058517a1)