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

  1. Inspect e.getCause() to identify the actual repository failure.
  2. Verify the directory id belongs to the currently connected repository.
  3. Reconnect to the repository and retry.
  4. 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

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


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 );
    }
  }

  @Override

View on GitHub (pinned to f3058517a1)