pentaho/pentaho-kettle · error · KettleException
Unable to get all cluster schema names
Error message
Unable to get all cluster schema names
What it means
getClusterNames(boolean) failed: it lists cluster-schema repository files and collects their titles; any exception during the listing is wrapped as this KettleException. It means cluster schema names could not be read from the PUR repository.
Solutions
- Check read permissions on the shared cluster-schema folder for the connected user.
- Inspect the wrapped cause and check BA server logs for the listing failure.
- Reconnect/re-authenticate and retry the call.
- Repair repository metadata via admin tooling if corruption is confirmed.
Example fix
// before
String[] names = repo.getClusterNames(false);
// after
String[] names;
try {
names = repo.getClusterNames(false);
} catch (KettleException e) {
names = new String[0];
log.warn("No cluster names: {}", e.getCause());
} Defensive patterns
Strategy: fallback
Validate before calling
if (!repo.isConnected()) throw new KettleException("Repository not connected"); Type guard
null
Try / catch
try {
names = repo.getClusterNames(false);
} catch (KettleException e) {
log.warn("Cluster names unavailable: {}", e.getCause());
names = new String[0];
} Prevention
- Verify user permissions on shared cluster-schema folders.
- Monitor BA server availability before batch repository reads.
- Check server logs for metadata errors after upgrades.
When it happens
Trigger: Calling getClusterNames(includeDeleted) when the shared-folder children listing throws — unreadable folder, service error, or broken repository metadata.
Common situations: Restricted user account browsing shared resources; enterprise repository temporarily unavailable; metadata corruption after an upgrade.
Understand the failure class
Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.
Related errors
- Unable to get all cluster schema IDs
- Unable to get list of object names from directory [
- AbsSecurityProvider.ERROR_0002_UNABLE_TO_ACCESS_IS_ALLOWED
- AddSequenceMeta.Exception.UnableToReadStepInfo
- AddSequenceMeta.Exception.UnableToSaveStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/7ef94270ec1a1594.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/pur/core/src/main/java/org/pentaho/di/repository/pur/PurRepository.java:1011
ids.add( new StringObjectId( file.getId().toString() ) );
}
return ids.toArray( new ObjectId[ 0 ] );
} catch ( Exception e ) {
throw new KettleException( "Unable to get all cluster schema IDs", e );
}
}
@Override
public String[] getClusterNames( boolean includeDeleted ) throws KettleException {
try {
List<RepositoryFile> children = getAllFilesOfType( null, RepositoryObjectType.CLUSTER_SCHEMA, 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 cluster schema names", e );
}
}
@Override
public ObjectId getDatabaseID( final String name ) throws KettleException {
return getObjectID( name, RepositoryObjectType.DATABASE );
}
private ObjectId getObjectID( String name, RepositoryObjectType type ) throws KettleException {
try {
ObjectId objectId = getObjectId( name, null, type, false );
if ( objectId == null ) {
List<RepositoryFile> allFilesOfType = getAllFilesOfType( null, type, false );
String[] existingNames = new String[ allFilesOfType.size() ];
for ( int i = 0; i < allFilesOfType.size(); i++ ) {
RepositoryFile file = allFilesOfType.get( i );
existingNames[ i ] = file.getTitle();
}View on GitHub (pinned to f3058517a1)