pentaho/pentaho-kettle · error · KettleException
No master server was specified in cluster schema [" +…
Error message
No master server was specified in cluster schema [" + clusterSchema + "]
What it means
TransSplitter.checkClusterConfiguration() iterates every cluster schema used by the transformation and throws KettleException 'No master server was specified in cluster schema [<schema>]' when clusterSchema.findMaster() returns null. Unlike error 1226 (dynamic resolution at split time), this is the upfront validation of static cluster configuration.
Solutions
- Designate exactly one master server in the cluster schema (SlaveServer.setMaster(true) or the master checkbox in Spoon).
- Re-check the cluster schema used by the transformation's clustered steps and re-save the metadata.
- Run checkClusterConfiguration() in a pre-flight validation before cluster submission to fail fast.
- If the environment has no master (e.g. testing), switch to local/standalone execution instead of clustering.
Example fix
// before
ClusterSchema cs = new ClusterSchema("cs1", Arrays.asList(slaveA, slaveB), socketsBuf);
// after
slaveA.setMaster(true);
ClusterSchema cs = new ClusterSchema("cs1", Arrays.asList(slaveA, slaveB), socketsBuf); Defensive patterns
Strategy: validation
Validate before calling
for (ClusterSchema cs : usedClusterSchemas) {
if (cs.findMaster() == null)
throw new IllegalStateException("Cluster schema '" + cs.getName() + "' has no master server");
} Try / catch
try {
splitter.splitOriginalTransformation();
} catch (KettleException e) {
if (e.getMessage().startsWith("No master server was specified")) {
// fix cluster schema, then retry
}
} Prevention
- Run splitter.checkClusterConfiguration() as a pre-flight step
- Keep exactly one master per cluster schema
- Re-validate cluster schemas after any slave-server edits
When it happens
Trigger: checkClusterConfiguration(), invoked from splitOriginalTransformation(), encountering a (non-empty) ClusterSchema in the transformation whose slave-server list has no server with isMaster()==true.
Common situations: Creating a cluster schema and adding only slave servers; forgetting to designate a master after editing cluster members; schema referenced by steps but configured with stale/removed master entry.
Understand the failure class
Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.
Related errors
- At least one slave server is required to be present in…
- You always need at least one master in a cluster schema.
- A server socket allocation always has to accompanied by a…
- A server socket allocation always has to accompanied by a…
- A server socket allocation always has to accompanied by a…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/5ed5515bbba9974b.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/cluster/TransSplitter.java:181
* the originalTransformation to set
*/
public void setOriginalTransformation( TransMeta originalTransformation ) {
this.originalTransformation = originalTransformation;
}
private void checkClusterConfiguration() throws KettleException {
Map<String, ClusterSchema> map = new Hashtable<String, ClusterSchema>();
List<StepMeta> steps = originalTransformation.getSteps();
for ( int i = 0; i < steps.size(); i++ ) {
StepMeta step = steps.get( i );
ClusterSchema clusterSchema = step.getClusterSchema();
if ( clusterSchema != null ) {
map.put( clusterSchema.getName(), clusterSchema );
// Make sure we have at least one master to work with.
//
if ( clusterSchema.findMaster() == null ) {
throw new KettleException( "No master server was specified in cluster schema [" + clusterSchema + "]" );
}
// Remember cluster details while we have the cluster handy
//
socketsBufferSize =
Const.toInt(
originalTransformation.environmentSubstitute( clusterSchema.getSocketsBufferSize() ), 50000 );
compressingSocketStreams = clusterSchema.isSocketsCompressed();
// Validate the number of slaves. We need at least one to have a valid cluster
//
List<SlaveServer> slaves = clusterSchema.getSlaveServersFromMasterOrLocal();
int count = 0;
for ( int s = 0; s < slaves.size(); s++ ) {
if ( !slaves.get( s ).isMaster() ) {
count++;
}
}View on GitHub (pinned to f3058517a1)