pentaho/pentaho-kettle · error · KettleException

Unable to load slave server from the file repository

Error message

Unable to load slave server from the file repository

What it means

KettleFileRepository.loadSlaveServer() throws this KettleException when it cannot parse or locate the slave server XML node for the given ObjectId. Slave servers are stored as XML fragments in the file repository; loadNodeFromXML() failure or bad XML content triggers it.

Solutions

  1. Inspect the cause to determine whether the file is missing or the XML is invalid
  2. Verify the slave server file exists under the repository base directory
  3. Re-create the slave server definition via Spoon and re-save it to the repository
  4. Refresh the directory tree and re-resolve the slave server ObjectId
Defensive patterns

Strategy: try-catch

Validate before calling

if (!repo.exists(idSlaveServer)) {
  throw new IllegalStateException("Slave server id not found: " + idSlaveServer);
}

Try / catch

try {
  SlaveServer slave = repo.loadSlaveServer(id, null);
} catch (KettleException e) {
  log.error("Slave server load failed, check XML file integrity", e);
}

Prevention

When it happens

Trigger: Calling loadSlaveServer(ObjectId id_slave_server, String versionName) when the id points to a missing file, the XML file is corrupt or does not contain the SlaveServer.XML_TAG node, or loadNodeFromXML throws.

Common situations: Slave server definition file manually edited or truncated; repository copied partially leaving slave definitions behind; id obtained from an out-of-date directory listing after the slave file was deleted.

Understand the failure class

Background: "failed to read file", EACCES, ENOENT and "could not read <path>" errors: when a program can't read a file from disk — this error's family across 49 libraries.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/repository/filerep/KettleFileRepository.java:1090

      }

      return list;
    } catch ( Exception e ) {
      throw new KettleException( "Unable to get list of jobs in folder with id : " + id_directory, e );
    }
  }

  public int getNrSubDirectories( ObjectId id_directory ) throws KettleException {

    return 0;
  }

  @Override
  public SlaveServer loadSlaveServer( ObjectId id_slave_server, String versionName ) throws KettleException {
    try {
      return new SlaveServer( loadNodeFromXML( id_slave_server, SlaveServer.XML_TAG ) );
    } catch ( Exception e ) {
      throw new KettleException( "Unable to load slave server from the file repository", e );
    }
  }

  @Override
  public TransMeta loadTransformation( String transname, RepositoryDirectoryInterface repdir,
    ProgressMonitorListener monitor, boolean setInternalVariables, String versionName ) throws KettleException {

    // This is a standard load of a transformation serialized in XML...
    //
    String filename = calcDirectoryName( repdir ) + transname + ".ktr";
    TransMeta transMeta = new TransMeta( DefaultBowl.getInstance(), filename, this, setInternalVariables );
    transMeta.setRepository( this );
    transMeta.setMetaStore( MetaStoreConst.getDefaultMetastore() );
    transMeta.setFilename( null );
    transMeta.setName( transname );
    transMeta.setObjectId( new StringObjectId( calcObjectId( repdir, transname, EXT_TRANSFORMATION ) ) );

    transMeta.clearChanged();

View on GitHub (pinned to f3058517a1)