{"record":{"id":"390bc15192dd03fe","repo":"pentaho/pentaho-kettle","slug":"an-error-occurred-sending-the-master-transformation","errorCode":null,"errorMessage":"An error occurred sending the master transformation: ","messagePattern":"An error occurred sending the master transformation: ","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/Trans.java","lineNumber":3814,"sourceCode":"          variables.put( Const.INTERNAL_VARIABLE_CLUSTER_SIZE, Integer.toString( slaves.length ) );\n          variables.put( Const.INTERNAL_VARIABLE_CLUSTER_MASTER, \"Y\" );\n\n          // Parameters override the variables but they need to pass over the configuration too...\n          //\n          Map<String, String> params = transConfiguration.getTransExecutionConfiguration().getParams();\n          TransMeta ot = transSplitter.getOriginalTransformation();\n          for ( String param : ot.listParameters() ) {\n            String value =\n              Const.NVL( ot.getParameterValue( param ), Const.NVL( ot.getParameterDefault( param ), ot.getVariable(\n                param ) ) );\n            params.put( param, value );\n          }\n\n          String masterReply =\n            masterServer.sendXML( transConfiguration.getXML(), RegisterTransServlet.CONTEXT_PATH + \"/?xml=Y\" );\n          WebResult webResult = WebResult.fromXMLString( masterReply );\n          if ( !webResult.getResult().equalsIgnoreCase( WebResult.STRING_OK ) ) {\n            throw new KettleException( \"An error occurred sending the master transformation: \" + webResult\n              .getMessage() );\n          }\n          carteObjectMap.put( master, webResult.getId() );\n        }\n      }\n\n      // Then the slaves...\n      // These are started in a background thread.\n      //\n      for ( int i = 0; i < slaves.length; i++ ) {\n        final int index = i;\n\n        final TransMeta slaveTrans = transSplitter.getSlaveTransMap().get( slaves[ i ] );\n\n        if ( executionConfiguration.isClusterPosting() ) {\n          Runnable runnable = new Runnable() {\n            @Override\n            public void run() {","sourceCodeStart":3796,"sourceCodeEnd":3832,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/Trans.java#L3796-L3832","documentation":"During clustered execution, the master transformation's XML is registered on the master Carte server via RegisterTransServlet. If the server replies with a WebResult that is not OK, the message from the server is appended and thrown as a KettleException.","triggerScenarios":"executeClustered calls masterServer.sendXML(..., RegisterTransServlet.CONTEXT_PATH + \"/?xml=Y\") and the Carte reply reports failure (registration rejected, duplicate name, Carte internal error).","commonSituations":"Carte master not running or wrong host/port in cluster schema, transformation with the same name already registered on the master, authentication problems with Carte, transformation XML rejected server-side (version mismatch).","solutions":["Read the appended webResult.getMessage() — it contains the Carte server's actual error","Verify the cluster schema's master host/port and that Carte is running and reachable","Check Carte authentication (carte config users/passwords) and that the registered name doesn't already exist with a conflicting ID","Align PDI versions: a newer transformation XML sent to an older Carte can be rejected"],"exampleFix":"// before\nSlaveServer master = new SlaveServer(\"master\", \"wrong-host\", 8080, ...);\n// after\nSlaveServer master = new SlaveServer(\"master\", \"carte-host\", 8081, \"cluster\", \"cluster\");","handlingStrategy":"validation","validationCode":"// ping the master Carte server before clustering\nSlaveServer master = clusterSchema.findMaster();\nString status = master.getStatus(); // throws/indicates if Carte unreachable\nif (!status.contains(\"\" + SlaveServer.STATUS_OK)) throw new IllegalStateException(\"Master Carte not healthy\");","typeGuard":null,"tryCatchPattern":"try {\n  TransSplitter splitter = Trans.executeClustered(transMeta, config);\n} catch (KettleException e) {\n  if (e.getMessage().startsWith(\"An error occurred sending the master transformation:\")) {\n    logError(\"Master Carte rejected registration: \" + e.getMessage());\n  } else { throw e; }\n}","preventionTips":["Verify master Carte is running and its host/port in the cluster schema are correct","Check Carte authentication credentials in the cluster schema","Ensure transformation names don't collide with stale registrations on Carte","Keep PDI versions consistent between client and Carte servers"],"tags":["cluster","carte","network"],"backgroundTag":"api-error-response","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"}