pentaho/pentaho-kettle · error · KettleException
Unable to get all slave server IDs
Error message
Unable to get all slave server IDs
What it means
PurRepository.getSlaveServerIDs() maps slave-server repository files to ObjectId values and wraps any failure in this KettleException. The thrown error hides the underlying pur client exception as its cause.
Solutions
- Inspect e.getCause() to identify the actual repository failure.
- Verify the directory id belongs to the currently connected repository.
- Reconnect to the repository and retry.
- Confirm the Pentaho server is reachable and the user can read the folder.
Example fix
// before
ObjectId[] ids = repo.getSlaveServerIDs(dirId, false);
// after
try {
ObjectId[] ids = repo.getSlaveServerIDs(dirId, false);
} catch (KettleException e) {
log.error("slave id listing failed", e.getCause());
ensureConnected(repo); // reconnect if disconnected, then retry
} Defensive patterns
Strategy: try-catch
Validate before calling
if (repo == null || !repo.isConnected()) throw new IllegalStateException("repository not connected");
if (dirId == null) throw new IllegalArgumentException("dirId required"); Type guard
boolean usable(Repository repo) { try { return repo != null && repo.isConnected(); } catch (Throwable t) { return false; } } Try / catch
try { return repo.getSlaveServerIDs(dirId, false); } catch (KettleException e) { log.error("cause: ", e.getCause()); return new ObjectId[0]; } Prevention
- Verify the directory id belongs to the active repository connection
- Reconnect after server restarts
- Check permissions on the folder before listing
When it happens
Trigger: Calling getSlaveServerIDs(idDirectory, includeDeleted) when the pur getChildren call fails: invalid directory id, broken repository connection, deleted folder, or server-side error.
Common situations: Repository session invalidated after server restart; directory id from a different repository instance; network outage mid-call; folder renamed/deleted concurrently by another client.
Understand the failure class
Background: "API request failed": what wrapped HTTP errors from external APIs mean and how to find the real cause — this error's family across 29 libraries.
Related errors
- Unable to get all partition schema names
- Unable to get all slave server names
- Unable to get all transformation names
- Unable to get list of objects from directory [dirId]
- Unable to load cluster schema with id [idClusterSchema]
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/73ce07309a13d53f.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/pur/core/src/main/java/org/pentaho/di/repository/pur/PurRepository.java:1651
return securityManager;
}
@Override
public ObjectId getSlaveID( String name ) throws KettleException {
return getObjectID( name, RepositoryObjectType.SLAVE_SERVER );
}
@Override
public ObjectId[] getSlaveIDs( boolean includeDeleted ) throws KettleException {
try {
List<RepositoryFile> children = getAllFilesOfType( null, RepositoryObjectType.SLAVE_SERVER, includeDeleted );
List<ObjectId> ids = new ArrayList<ObjectId>();
for ( RepositoryFile file : children ) {
ids.add( new StringObjectId( file.getId().toString() ) );
}
return ids.toArray( new ObjectId[ 0 ] );
} catch ( Exception e ) {
throw new KettleException( "Unable to get all slave server IDs", e );
}
}
@Override
public String[] getSlaveNames( boolean includeDeleted ) throws KettleException {
try {
List<RepositoryFile> children = getAllFilesOfType( null, RepositoryObjectType.SLAVE_SERVER, includeDeleted );
List<String> names = new ArrayList<String>();
for ( RepositoryFile file : children ) {
names.add( file.getTitle() );
}
return names.toArray( new String[ 0 ] );
} catch ( Exception e ) {
throw new KettleException( "Unable to get all slave server names", e );
}
}
@OverrideView on GitHub (pinned to f3058517a1)