pentaho/pentaho-kettle · error · KettleException
Unable to get root object ids for extension [ + extension +…
Error message
Unable to get root object ids for extension [ + extension + ]
What it means
getRootObjectIDs(extension) in KettleFileRepository scans the repository root for files with the given extension and wraps any exception into this KettleException with the message 'Unable to get root object ids for extension [...]'. It indicates the repository could not enumerate root-level objects (directory read, VFS resolution, or file filtering failed); the underlying exception is the cause.
Solutions
- Confirm the repository base directory exists and is readable by the process
- Fix filesystem/VFS permissions or remount the repository location
- Check the chained cause for the concrete IOException and address it
- Reinitialize the repository connection so the root path is re-resolved
Defensive patterns
Strategy: try-catch
Validate before calling
File base = new File(repoBaseDirectory);
if (!base.isDirectory() || !base.canRead()) throw new KettleException("Repository root missing or unreadable: " + repoBaseDirectory); Try / catch
try {
ObjectId[] ids = repository.getSlaveIDs(false);
} catch (KettleException e) {
logger.error("Root enumeration failed: " + e.getCause(), e);
// retry after fixing repo root or return empty with warning
} Prevention
- Ensure the repository base directory exists and is readable before connecting
- Avoid moving the repository root while clients are connected
- Monitor disk/mount health for network-hosted repository locations
When it happens
Trigger: Calling getRootObjectIDs / getSlaveIDs / any get*IDs wrapper when the repository root directory is unreadable, does not exist, or a VFS/IO error occurs while iterating root files for the given extension.
Common situations: Repository base directory missing or moved after configuration; permission errors on the repo root; network-mounted repository location temporarily unavailable; corrupted directory entries preventing enumeration.
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 get list of transformations in folder with id : +…
- Unable to get list of transformations names in folder with…
- Unable to load the directory tree from this file repository
- Unable to write log entry to file [ + logfile + ]
- Class [ + repositoryElement.getClass().getName() + ] needs…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/4fa709f75f8c5cbd.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/repository/filerep/KettleFileRepository.java:674
String folderName = repositoryMeta.getBaseDirectory();
FileObject folder = KettleVFS.getInstance( DefaultBowl.getInstance() ).getFileObject( folderName );
for ( FileObject child : folder.getChildren() ) {
if ( child.getType().equals( FileType.FILE ) ) {
if ( !child.isHidden() || !repositoryMeta.isHidingHiddenFiles() ) {
String name = child.getName().getBaseName();
if ( name.endsWith( extension ) ) {
list.add( new StringObjectId( name ) );
}
}
}
}
return list.toArray( new ObjectId[list.size()] );
} catch ( Exception e ) {
throw new KettleException( "Unable to get root object ids for extension [" + extension + "]", e );
}
}
@Override
public ObjectId[] getSlaveIDs( boolean includeDeleted ) throws KettleException {
return getRootObjectIDs( EXT_SLAVE_SERVER );
}
public ObjectId[] getClusterSlaveIDs( ObjectId id_cluster_schema ) throws KettleException {
return new ObjectId[] {};
}
@Override
public String[] getSlaveNames( boolean includeDeleted ) throws KettleException {
return convertRootIDsToNames( getSlaveIDs( false ) );
}
@OverrideView on GitHub (pinned to f3058517a1)