{"record":{"id":"cd49f4549be4f7a0","repo":"pentaho/pentaho-kettle","slug":"at-least-one-slave-server-is-required-to-be-present-in","errorCode":null,"errorMessage":"At least one slave server is required to be present in cluster schema [\" + clusterSchema + \"]","messagePattern":"At least one slave server is required to be present in cluster schema \\[\" \\+ clusterSchema \\+ \"\\]","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/cluster/TransSplitter.java","lineNumber":201,"sourceCode":"\n        // Remember cluster details while we have the cluster handy\n        //\n        socketsBufferSize =\n          Const.toInt(\n            originalTransformation.environmentSubstitute( clusterSchema.getSocketsBufferSize() ), 50000 );\n        compressingSocketStreams = clusterSchema.isSocketsCompressed();\n\n        // Validate the number of slaves. We need at least one to have a valid cluster\n        //\n        List<SlaveServer> slaves = clusterSchema.getSlaveServersFromMasterOrLocal();\n        int count = 0;\n        for ( int s = 0; s < slaves.size(); s++ ) {\n          if ( !slaves.get( s ).isMaster() ) {\n            count++;\n          }\n        }\n        if ( count <= 0 ) {\n          throw new KettleException( \"At least one slave server is required to be present in cluster schema [\"\n            + clusterSchema + \"]\" );\n        }\n      }\n    }\n    if ( map.size() == 0 ) {\n      throw new KettleException(\n        \"No cluster schemas are being used.  As such it is not possible to split and cluster this transformation.\" );\n    }\n    if ( map.size() > 1 ) {\n      throw new KettleException(\n        \"At this time we don't support the use of multiple cluster schemas in one and the same transformation.\" );\n    }\n  }\n\n  private String getWriterName( ClusterSchema clusterSchema, SlaveServer sourceSlaveServer, String sourceStepname,\n    int sourceStepCopy, SlaveServer targetSlaveServer, String targetStepName, int targetStepCopy ) throws Exception {\n    return \"Writer : \"\n      + getPort(","sourceCodeStart":183,"sourceCodeEnd":219,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/cluster/TransSplitter.java#L183-L219","documentation":"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.","triggerScenarios":"checkClusterConfiguration() finding a cluster schema whose servers are all masters (count of non-master slaves <= 0).","commonSituations":"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.","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."],"exampleFix":"// before\nslaveA.setMaster(true); slaveB.setMaster(true); // no slaves\n// after\nslaveA.setMaster(true); slaveB.setMaster(false); // one master, one slave","handlingStrategy":"validation","validationCode":"long slaves = cs.getSlaveServers().stream().filter(s -> !s.isMaster()).count();\nif (slaves == 0) throw new IllegalStateException(\"Cluster schema '\" + cs.getName() + \"' needs at least one non-master slave\");","typeGuard":null,"tryCatchPattern":"try {\n  splitter.splitOriginalTransformation();\n} catch (KettleException e) {\n  if (e.getMessage().startsWith(\"At least one slave server is required\")) {\n    // add a slave server to the schema\n  }\n}","preventionTips":["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"],"tags":["kettle","clustering","cluster-schema","validation"],"backgroundTag":"missing-required-config-field","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}