{"record":{"id":"1858226e2fb6b914","repo":"pentaho/pentaho-kettle","slug":"no-clustering-is-used-in-this-transformation","errorCode":null,"errorMessage":"No clustering is used in this transformation.","messagePattern":"No clustering is used in this transformation\\.","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/cluster/TransSplitter.java","lineNumber":140,"sourceCode":"    this.originalTransformation.shareVariablesWith( transMeta );\n    this.originalTransformation.copyParametersFrom( transMeta );\n\n    // Retain repository information\n    this.originalTransformation.setRepositoryDirectory( transMeta.getRepositoryDirectory() );\n\n    Repository rep = transMeta.getRepository();\n    if ( rep != null ) {\n      rep.readTransSharedObjects( this.originalTransformation );\n    }\n\n    checkClusterConfiguration();\n\n    // FIRST : convert the dynamic master into a fixed one.\n    // This is why we copied the original transformation\n    //\n    ClusterSchema clusterSchema = this.originalTransformation.findFirstUsedClusterSchema();\n    if ( clusterSchema == null ) {\n      throw new KettleException( \"No clustering is used in this transformation.\" );\n    }\n    if ( clusterSchema.isDynamic() ) {\n      List<SlaveServer> slaveServers = clusterSchema.getSlaveServersFromMasterOrLocal();\n      SlaveServer masterSlaveServer = clusterSchema.findMaster();\n      if ( masterSlaveServer == null ) {\n        throw new KettleException( \"You always need at least one master in a cluster schema.\" );\n      }\n      slaveServers.add( 0, masterSlaveServer );\n      clusterSchema.setDynamic( false );\n      clusterSchema.setSlaveServers( slaveServers );\n    }\n  }\n\n  /**\n   * @return the originalTransformation\n   */\n  public TransMeta getOriginalTransformation() {\n    return originalTransformation;","sourceCodeStart":122,"sourceCodeEnd":158,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/cluster/TransSplitter.java#L122-L158","documentation":"TransSplitter.splitOriginalTransformation first converts a dynamic cluster master into a fixed one; it throws KettleException 'No clustering is used in this transformation.' when originalTransformation.findFirstUsedClusterSchema() returns null. Splitting only makes sense when at least one step uses a cluster schema.","triggerScenarios":"Calling TransSplitter.splitOriginalTransformation() (or TransExecutionConfiguration-based clustered execution) on a transformation with no step assigned to any ClusterSchema.","commonSituations":"Programmatically submitting a transformation for clustered run without marking clustered steps; copying a transformation and dropping its cluster schema; running a plain transformation through the cluster-splitting API.","solutions":["Assign a cluster schema to at least one step in the transformation (Right-click step > Clustered) or set ClusterSchema on the StepMeta in code.","Verify the cluster schema is still defined on the transformation's clusterSchemas list and not removed by a copy/import.","If clustering is not intended, execute the transformation normally instead of via TransSplitter.","Call findFirstUsedClusterSchema() yourself before splitting as a pre-check."],"exampleFix":"// before\nTransSplitter splitter = new TransSplitter(transMeta); // no cluster schema\n// after\ntransMeta.addClusterSchema(clusterSchema);\nstepMeta.setClusterSchema(clusterSchema);\nTransSplitter splitter = new TransSplitter(transMeta);","handlingStrategy":"validation","validationCode":"if (transMeta.findFirstUsedClusterSchema() == null) {\n  throw new IllegalStateException(\"Transformation does not use a cluster schema; cannot split\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  splitter.splitOriginalTransformation();\n} catch (KettleException e) {\n  if (e.getMessage().contains(\"No clustering is used\")) {\n    // fall back to normal local execution\n  }\n}","preventionTips":["Pre-check findFirstUsedClusterSchema() before splitting","Assign cluster schemas to steps in code or Spoon explicitly","Use plain Trans execution for non-clustered transformations"],"tags":["kettle","clustering","transformation","precondition"],"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"}