pentaho/pentaho-kettle · error · KettleException

Unable to get all slave server names

Error message

Unable to get all slave server names

What it means

PurRepository.getSlaveNames() collects titles of slave-server files in a directory and wraps any exception from the listing in this KettleException. It is a generic wrapper; the actionable information is in the cause chain.

Solutions

  1. Check e.getCause() for the underlying pur exception.
  2. Reconnect to the repository and retry the listing.
  3. Validate the directory id exists (getRepositoryDirectory) before listing.
  4. Verify read permissions on the target folder for the repository user.

Example fix

// before
String[] names = repo.getSlaveNames(dirId, false);
// after
try {
  String[] names = repo.getSlaveNames(dirId, false);
} catch (KettleException e) {
  log.error("slave name listing failed: " + e.getCause());
  reconnectIfNeeded();
}
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.getSlaveNames(dirId, false); } catch (KettleException e) { log.error("cause: ", e.getCause()); return new String[0]; }

Prevention

When it happens

Trigger: Calling getSlaveNames(idDirectory, includeDeleted) when the underlying pur getChildren/file title access throws (bad directory id, connection loss, permission denial).

Common situations: Listing slaves from a stale or disconnected repository session; referencing a deleted directory; user lacks read rights on the folder; server-side repository error.

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/c2d8106f9cb87cb2. Report an issue: GitHub.

Appendix: source

Thrown at plugins/pur/core/src/main/java/org/pentaho/di/repository/pur/PurRepository.java:1665

        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
  @SuppressWarnings( "unchecked" )
  public List<SlaveServer> getSlaveServers() throws KettleException {
    return (List<SlaveServer>) loadAndCacheSharedObjects( true ).get( RepositoryObjectType.SLAVE_SERVER );
  }

  @Override
  @SuppressWarnings( "unchecked" )
  public List<DatabaseMeta> getConnections( boolean cached ) throws KettleException {
    return (List<DatabaseMeta>) getRepositoryObjects( RepositoryObjectType.DATABASE, cached );
  }

  @Override
  @SuppressWarnings( "unchecked" )
  public List<SlaveServer> getSlaveServers( boolean cached ) throws KettleException {

View on GitHub (pinned to f3058517a1)