{"record":{"id":"0135a798f07a166d","repo":"pentaho/pentaho-kettle","slug":"the-target-slave-server-name-is-not-defined-for-remote","errorCode":null,"errorMessage":"The target slave server name is not defined for remote output step: \" + remoteStep","messagePattern":"The target slave server name is not defined for remote output step: \" \\+ remoteStep","errorType":"exception","errorClass":"KettleStepException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/step/BaseStep.java","lineNumber":2084,"sourceCode":"\n    outputRowSetsLock.writeLock().lock();\n    try {\n      // Set the current slave target name on all the current output steps (local)\n      //\n      for ( RowSet rowSet : outputRowSets ) {\n        rowSet.setRemoteSlaveServerName( getVariable( Const.INTERNAL_VARIABLE_SLAVE_SERVER_NAME ) );\n        if ( getVariable( Const.INTERNAL_VARIABLE_SLAVE_SERVER_NAME ) == null ) {\n          throw new KettleStepException( \"Variable '\"\n            + Const.INTERNAL_VARIABLE_SLAVE_SERVER_NAME + \"' is not defined.\" );\n        }\n      }\n\n      // Start threads: one per remote step to funnel the data through...\n      //\n      for ( RemoteStep remoteStep : remoteOutputSteps ) {\n        try {\n          if ( remoteStep.getTargetSlaveServerName() == null ) {\n            throw new KettleStepException(\n              \"The target slave server name is not defined for remote output step: \" + remoteStep );\n          }\n          BlockingRowSet rowSet = remoteStep.openWriterSocket();\n          if ( log.isDetailed() ) {\n            logDetailed( BaseMessages.getString( PKG, \"BaseStep.Log.OpenedWriterSocketToRemoteStep\", remoteStep ) );\n          }\n          outputRowSets.add( rowSet );\n        } catch ( IOException e ) {\n          throw new KettleStepException( \"Error opening writer socket to remote step '\" + remoteStep + \"'\", e );\n        }\n      }\n    } finally {\n      outputRowSetsLock.writeLock().unlock();\n    }\n    remoteOutputStepsInitialized = true;\n  }\n\n  /**","sourceCodeStart":2066,"sourceCodeEnd":2102,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/step/BaseStep.java#L2066-L2102","documentation":"During clustered-output initialization, BaseStep iterates remoteOutputSteps and requires each RemoteStep to have a target slave server name. If RemoteStep.getTargetSlaveServerName() returns null, a KettleStepException naming the remote step is thrown before any writer socket is opened. The cluster routing metadata for that remote step is incomplete.","triggerScenarios":"The transformation's remote output steps were built without a targetSlaveServerName — e.g. cluster schema references a slave with no host/port resolved at configuration time, or the remote step metadata was constructed programmatically without setting the slave name.","commonSituations":"Programmatically composing clustered executions (TransExecutionConfiguration) without filling in target slave names; missing/removed slave server entries in the repository; cluster schema misconfiguration where a step's target slave is undefined.","solutions":["Set targetSlaveServerName on every RemoteStep before execution (from the corresponding SlaveServer's name).","Verify the cluster schema has all slave servers defined with valid hostnames.","Re-generate the clustered transformation configuration via TransExecutionConfiguration so remote steps get complete slave info.","Validate before execution: iterate remoteOutputSteps and fail fast with a clear message if any target slave name is null."],"exampleFix":"// before\nRemoteStep rs = new RemoteStep(host, port, ...);\n// targetSlaveServerName never set\n\n// after\nrs.setTargetSlaveServerName(slaveServer.getName());","handlingStrategy":"validation","validationCode":"// Fail fast before execution if any remote step lacks a target slave name\nfor (RemoteStep rs : remoteOutputSteps) {\n  if (rs.getTargetSlaveServerName() == null) {\n    throw new IllegalStateException(\"Missing targetSlaveServerName for \" + rs);\n  }\n}","typeGuard":null,"tryCatchPattern":"try {\n  trans.execute(null);\n} catch (KettleStepException e) {\n  if (e.getMessage().contains(\"target slave server name is not defined\")) {\n    logError(\"Incomplete remote step config: \" + e.getMessage(), e);\n  } else { throw e; }\n}","preventionTips":["Always populate slave server entries before generating remote steps","Use TransExecutionConfiguration to build remote step metadata","Programmatically validate remote steps before starting the transformation"],"tags":["cluster","configuration","remote-step"],"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"}