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

  1. Check read permissions on the shared cluster-schema folder for the connected user.
  2. Inspect the wrapped cause and check BA server logs for the listing failure.
  3. Reconnect/re-authenticate and retry the call.
  4. 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

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


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)