pentaho/pentaho-kettle · error · KettleException

Unable to load slave server with id [idSlaveServer]

Error message

Unable to load slave server with id [idSlaveServer]

What it means

PurRepository.loadSlaveServer(idSlaveServer, versionId, ignoreErrors) retrieves the slave-server file, its version summary, and assembles it via slaveTransformer; any exception in that chain is wrapped in this KettleException.

Solutions

  1. Check e.getCause() for the true failure (not-found vs connection vs transform).
  2. Refresh the id via getSlaveServerIDs()/getSlaveServers() and reload.
  3. Retry with versionId = null for the latest version.
  4. Reconnect to the repository and verify the slave server still exists.

Example fix

// before
SlaveServer ss = repo.loadSlaveServer(staleId, verId, false);
// after
try {
  SlaveServer ss = repo.loadSlaveServer(staleId, null, false);
} catch (KettleException e) {
  log.warn("slave server " + staleId + " load failed: " + e.getCause());
  ss = null;
}
Defensive patterns

Strategy: try-catch

Validate before calling

// verify the object still exists before loading
boolean present = Arrays.asList(repo.getSlaveServerIDs(dirId)).contains(id);

Type guard

boolean loadable(ObjectId id) { return id != null && id.getId() != null && !id.getId().isEmpty(); }

Try / catch

try { return repo.loadSlaveServer(id, null, false); } catch (KettleException e) { log.warn("slave server load failed: ", e.getCause()); return null; }

Prevention

When it happens

Trigger: Calling loadSlaveServer with a stale/deleted ObjectId, an invalid versionId, a broken repository connection, or data that slaveTransformer cannot assemble.

Common situations: Slave server removed on the server while its id is still cached locally; ids taken from a different repository; session expiry making getFileById fail; upgrade-related data format changes.

Understand the failure class

Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/1c476f7d774331b8. Report an issue: GitHub.

Appendix: source

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

  }

  @Override
  public SlaveServer loadSlaveServer( ObjectId idSlaveServer, String versionId ) throws KettleException {
    readWriteLock.readLock().lock();
    try {
      NodeRepositoryFileData
        data =
        pur.getDataAtVersionForRead( idSlaveServer.getId(), versionId, NodeRepositoryFileData.class );
      RepositoryFile file = null;
      if ( versionId != null ) {
        file = pur.getFileAtVersion( idSlaveServer.getId(), versionId );
      } else {
        file = pur.getFileById( idSlaveServer.getId() );
      }

      return slaveTransformer.assemble( file, data, pur.getVersionSummary( idSlaveServer.getId(), versionId ) );
    } catch ( Exception e ) {
      throw new KettleException( "Unable to load slave server with id [" + idSlaveServer + "]", e );
    } finally {
      readWriteLock.readLock().unlock();
    }
  }

  protected Map<RepositoryObjectType, List<? extends SharedObjectInterface<?>>> loadAndCacheSharedObjects(
    final boolean deepCopy ) throws KettleException {
    readWriteLock.readLock().lock();
    sharedObjectsLock.writeLock().lock();
    try {
      if ( sharedObjectsByType == null ) {
        sharedObjectsByType =
          new EnumMap<RepositoryObjectType, List<? extends SharedObjectInterface<?>>>( RepositoryObjectType.class );
        // Slave Servers are referenced by Cluster Schemas so they must be loaded first
        readSharedObjects( sharedObjectsByType, RepositoryObjectType.DATABASE, RepositoryObjectType.PARTITION_SCHEMA,
          RepositoryObjectType.SLAVE_SERVER, RepositoryObjectType.CLUSTER_SCHEMA );
      }
      return deepCopy ? deepCopy( sharedObjectsByType ) : sharedObjectsByType;

View on GitHub (pinned to f3058517a1)