pentaho/pentaho-kettle · error · KettleException
No master server could be found in the original…
Error message
No master server could be found in the original transformation
What it means
TransSplitter.getMasterServer scans the transformation's steps for a cluster schema and returns that schema's master slave server. If no step has a cluster schema, or the schema has no server marked as master, it throws. Clustering requires a designated master to orchestrate the slave transformations.
Solutions
- Mark one slave server in the cluster schema as the master (schema.setMasterSlaveServer(...) or check 'Master' in the schema dialog).
- Verify the steps in the transformation reference a cluster schema that actually has slave servers configured.
- Confirm getClusterSchema() is not null on at least one step before calling executeClustered().
Example fix
// before ClusterSchema schema = new ClusterSchema(slaves, null); // no master // after ClusterSchema schema = new ClusterSchema(slaves, slaves.get(0)); // master set
Defensive patterns
Strategy: validation
Validate before calling
boolean hasMaster = false;
for (StepMeta step : transMeta.getSteps()) {
ClusterSchema cs = step.getClusterSchema();
if (cs != null && cs.findMaster() != null) { hasMaster = true; break; }
}
if (!hasMaster) throw new IllegalStateException("Cluster schema needs a master slave server"); Try / catch
try { transSplitter.executeClustered(); }
catch (KettleException e) { if (e.getMessage().contains("No master server")) { configureMasterAndRetry(); } else throw e; } Prevention
- Always designate a master in the cluster schema dialog
- Verify steps still reference the cluster schema after edits
- Smoke-test clustering on a 2-node schema first
When it happens
Trigger: executeClustered()/masterSlaveServer()/cleanupCluster() call getMasterServer() when the transformation either has no clustered steps at all, or its cluster schema has no slave server flagged as master.
Common situations: Running a clustered execution where the schema definition lists slave servers but none is checked as 'master'; steps lost their cluster schema reference after editing the transformation; calling executeClustered on a transformation that was never clustered.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- At this time we don't support the use of multiple cluster…
- ClusterSchema.NoMasterServerDefined
- ClusterSchema.NoSlaveServerDefined
- It doesn't make sense to have a partitioned, clustered step…
- You always need at least one master in a cluster schema.
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/c085bd240d89d2da.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/cluster/TransSplitter.java:446
public TransMeta[] getSlaves() {
Collection<TransMeta> collection = slaveTransMap.values();
return collection.toArray( new TransMeta[collection.size()] );
}
public SlaveServer[] getSlaveTargets() {
Set<SlaveServer> set = slaveTransMap.keySet();
return set.toArray( new SlaveServer[set.size()] );
}
public SlaveServer getMasterServer() throws KettleException {
StepMeta[] steps = originalTransformation.getStepsArray();
for ( int i = 0; i < steps.length; i++ ) {
ClusterSchema clusterSchema = steps[i].getClusterSchema();
if ( clusterSchema != null ) {
return clusterSchema.findMaster();
}
}
throw new KettleException( "No master server could be found in the original transformation" );
}
public void splitOriginalTransformation() throws KettleException {
clear();
// Mixing clusters is not supported at the moment
// Perform some basic checks on the cluster configuration.
//
findUsedOriginalSteps();
checkClusterConfiguration();
generateSlavePartitionSchemas();
try {
SlaveServer masterSlaveServer = getMasterServer();
masterTransMeta = getOriginalCopy( false, null, null );
ClusterSchema clusterSchema = originalTransformation.findFirstUsedClusterSchema();
List<SlaveServer> slaveServers = clusterSchema.getSlaveServers();
int nrSlavesNodes = clusterSchema.findNrSlaves();
View on GitHub (pinned to f3058517a1)