{"record":{"id":"0a86f51d5273a076","repo":"pentaho/pentaho-kettle","slug":"there-was-an-error-starting-the-transformation-on-the-remote","errorCode":null,"errorMessage":"There was an error starting the transformation on the remote server: ","messagePattern":"There was an error starting the transformation on the remote server: ","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/Trans.java","lineNumber":4418,"sourceCode":"      //\n      String reply =\n        slaveServer.execService( PrepareExecutionTransServlet.CONTEXT_PATH + \"/?name=\" + URLEncoder.encode( transMeta\n          .getName(), \"UTF-8\" ) + \"&xml=Y&id=\" + carteObjectId );\n      WebResult webResult = WebResult.fromXMLString( reply );\n      if ( !webResult.getResult().equalsIgnoreCase( WebResult.STRING_OK ) ) {\n        throw new KettleException( \"There was an error preparing the transformation for excution on the remote server: \"\n          + Const.CR + webResult.getMessage() );\n      }\n\n      // Start the transformation\n      //\n      reply =\n        slaveServer.execService( StartExecutionTransServlet.CONTEXT_PATH + \"/?name=\" + URLEncoder.encode( transMeta\n          .getName(), \"UTF-8\" ) + \"&xml=Y&id=\" + carteObjectId );\n      webResult = WebResult.fromXMLString( reply );\n\n      if ( !webResult.getResult().equalsIgnoreCase( WebResult.STRING_OK ) ) {\n        throw new KettleException( \"There was an error starting the transformation on the remote server: \" + Const.CR\n          + webResult.getMessage() );\n      }\n\n      return carteObjectId;\n    } catch ( KettleException ke ) {\n      throw ke;\n    } catch ( Exception e ) {\n      throw new KettleException( e );\n    }\n  }\n\n  /**\n   * Checks whether the transformation is ready to start (i.e. execution preparation was successful)\n   *\n   * @return true if the transformation was prepared for execution successfully, false otherwise\n   * @see org.pentaho.di.trans.Trans#prepareExecution(String[])\n   */\n  public boolean isReadyToStart() {","sourceCodeStart":4400,"sourceCodeEnd":4436,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/Trans.java#L4400-L4436","documentation":"Thrown by Trans when starting a transformation on a remote slave server: after calling StartExecutionTransServlet on the Carte slave, the returned WebResult was not OK, so the remote start failed and the slave's message is appended. The transformation was prepared remotely but could not be launched.","triggerScenarios":"slaveServer.execService(StartExecutionTransServlet.CONTEXT_PATH + ...) returns a WebResult whose result != WebResult.STRING_OK.","commonSituations":"Slave killed or restarted between prepare and start; remote trans aborted on startup (missing resources/DB); Carte servlet rejected the request due to wrong name/id; network/proxy mangling the XML reply.","solutions":["Inspect the appended webResult.getMessage() and the slave's carte.log for the startup failure","Verify the slave is still up and the trans is in a prepared state (check Carte trans status servlet)","Retry with a fresh carteObjectId (re-register/re-prepare the trans)","Check slave resources (memory, DB connectivity) that the trans needs at start","Ensure master/slave Kettle versions match"],"exampleFix":"// before\nslaveServer.execService(StartExecutionTransServlet.CONTEXT_PATH + \"/?name=\" + name + \"&xml=Y&id=\" + id);\n// after: verify slave health before starting\nif (!slaveServer.getStatus().equalsIgnoreCase(\"OK\")) {\n  throw new KettleException(\"Slave not ready: \" + slaveServer.getHostname());\n}","handlingStrategy":"try-catch","validationCode":"WebResult r = new WebResult(WebResult.STRING_OK, \"precheck\"); // or query slave status servlet first\nif (!slaveServer.getStatus().equalsIgnoreCase(\"OK\")) throw new KettleException(\"Slave unavailable\");","typeGuard":"boolean isOk(WebResult w) { return w != null && WebResult.STRING_OK.equalsIgnoreCase(w.getResult()); }","tryCatchPattern":"try { trans.executeClustered(...); } catch (KettleException e) { log.error(\"Remote start failed: \" + e.getMessage(), e); /* verify trans state on slave via /kettle/trans/status/ */ }","preventionTips":["Avoid long gaps between prepare and start on slaves","Set up slave health checks and restart policies","Pin matching Kettle versions on all cluster nodes"],"tags":["kettle","clustered-execution","remote-server","carte"],"backgroundTag":"http-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"}