pentaho/pentaho-kettle · error · KettleException
At least one slave server is required to be present in…
Error message
At least one slave server is required to be present in cluster schema [" + clusterSchema + "]
What it means
TransSplitter.checkClusterConfiguration() counts non-master servers in each cluster schema and throws KettleException 'At least one slave server is required to be present in cluster schema [<schema>]' when the count of actual slaves (isMaster()==false) is zero. A cluster with only a master has nothing to distribute work to.
Solutions
- Add at least one non-master slave server to the cluster schema.
- Un-check 'master' on servers that should be slaves, keeping exactly one master.
- If only one node is available, run the transformation without clustering.
- Pre-validate schema contents (>=1 master and >=1 slave) before clustered execution.
Example fix
// before slaveA.setMaster(true); slaveB.setMaster(true); // no slaves // after slaveA.setMaster(true); slaveB.setMaster(false); // one master, one slave
Defensive patterns
Strategy: validation
Validate before calling
long slaves = cs.getSlaveServers().stream().filter(s -> !s.isMaster()).count();
if (slaves == 0) throw new IllegalStateException("Cluster schema '" + cs.getName() + "' needs at least one non-master slave"); Try / catch
try {
splitter.splitOriginalTransformation();
} catch (KettleException e) {
if (e.getMessage().startsWith("At least one slave server is required")) {
// add a slave server to the schema
}
} Prevention
- Ensure each cluster schema has >=1 master and >=1 slave
- Do not mark every server as master
- Validate schemas after member changes before clustered runs
When it happens
Trigger: checkClusterConfiguration() finding a cluster schema whose servers are all masters (count of non-master slaves <= 0).
Common situations: Building a cluster schema with a single server marked as master; accidentally marking all servers as masters while debugging; removing slave entries but keeping the schema referenced by steps.
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
- No master server was specified in cluster schema [" +…
- 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/cd49f4549be4f7a0.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/cluster/TransSplitter.java:201
// 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++;
}
}
if ( count <= 0 ) {
throw new KettleException( "At least one slave server is required to be present in cluster schema ["
+ clusterSchema + "]" );
}
}
}
if ( map.size() == 0 ) {
throw new KettleException(
"No cluster schemas are being used. As such it is not possible to split and cluster this transformation." );
}
if ( map.size() > 1 ) {
throw new KettleException(
"At this time we don't support the use of multiple cluster schemas in one and the same transformation." );
}
}
private String getWriterName( ClusterSchema clusterSchema, SlaveServer sourceSlaveServer, String sourceStepname,
int sourceStepCopy, SlaveServer targetSlaveServer, String targetStepName, int targetStepCopy ) throws Exception {
return "Writer : "
+ getPort(View on GitHub (pinned to f3058517a1)