{"record":{"id":"905e87eedfe1b952","repo":"pentaho/pentaho-kettle","slug":"jobtrans-exception-unabletofindremoteslaveserver-905e87","errorCode":null,"errorMessage":"JobTrans.Exception.UnableToFindRemoteSlaveServer","messagePattern":"JobTrans\\.Exception\\.UnableToFindRemoteSlaveServer","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/job/entries/trans/JobEntryTrans.java","lineNumber":945,"sourceCode":"            clustering = executionConfiguration.isExecutingClustered();\n            remoteSlaveServer = executionConfiguration.getRemoteServer();\n            doFallback = false;\n          } catch ( KettleException e ) {\n            log.logError( e.getMessage(), getName() );\n            result.setNrErrors( 1 );\n            result.setResult( false );\n            return result;\n          }\n        }\n\n        if ( doFallback ) {\n          // Figure out the remote slave server...\n          //\n          if ( !Utils.isEmpty( remoteSlaveServerName ) ) {\n            String realRemoteSlaveServerName = environmentSubstitute( remoteSlaveServerName );\n            remoteSlaveServer = parentJob.getJobMeta().findSlaveServer( realRemoteSlaveServerName );\n            if ( remoteSlaveServer == null ) {\n              throw new KettleException( BaseMessages.getString(\n                PKG, \"JobTrans.Exception.UnableToFindRemoteSlaveServer\", realRemoteSlaveServerName ) );\n            }\n          }\n        }\n\n\n        // Execute this transformation across a cluster of servers\n        //\n        if ( clustering ) {\n          executionConfiguration.setClusterPosting( true );\n          executionConfiguration.setClusterPreparing( true );\n          executionConfiguration.setClusterStarting( true );\n          executionConfiguration.setClusterShowingTransformation( false );\n          executionConfiguration.setSafeModeEnabled( false );\n          executionConfiguration.setRepository( rep );\n          executionConfiguration.setLogLevel( transLogLevel );\n          executionConfiguration.setPreviousResult( previousResult );\n","sourceCodeStart":927,"sourceCodeEnd":963,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/job/entries/trans/JobEntryTrans.java#L927-L963","documentation":"Thrown by JobEntryTrans.execute when the entry is configured to run the transformation remotely on a named slave server but that slave server cannot be found in the parent job's cluster/slave registry. The configured name (after environment substitution) does not match any registered SlaveServer. Execution aborts before the transformation is sent.","triggerScenarios":"remoteSlaveServerName is set on the trans job entry, environmentSubstitute resolves it, but parentJob.getJobMeta().findSlaveServer(name) returns null — the name is not defined among the job's slave servers.","commonSituations":"Typo in the slave server name; slave server defined in a shared meta store not loaded with the job; variable used for the slave name resolves to a wrong/unset value on a different environment; cluster definition removed after the entry was configured.","solutions":["Add the named slave server to the job metadata (JobMeta slave servers list) or correct the name in the job entry","Verify the environment variable used in the slave server name resolves to an existing slave at runtime","Re-select the slave server in Spoon so the reference is stored correctly","If remote execution is not intended, clear the remote slave server setting on the entry"],"exampleFix":"// before\njobEntry.setRemoteSlaveServerName( \"${SLAVE}\" ); // SLAVE unset at runtime\n// after\njobEntry.setRemoteSlaveServerName( \"slave-01\" ); // matches a registered SlaveServer\n// or validate before execute:\nSlaveServer s = jobMeta.findSlaveServer( name );\nif ( s == null ) throw new IllegalStateException( \"Unknown slave: \" + name );","handlingStrategy":"validation","validationCode":"String name = jobEntry.environmentSubstitute( jobEntry.getRemoteSlaveServerName() );\nif ( name != null && jobMeta.findSlaveServer( name ) == null ) {\n  throw new IllegalStateException( \"Slave server not registered: \" + name );\n}","typeGuard":null,"tryCatchPattern":"try { jobEntry.execute( result, nr ); } catch ( KettleException e ) { if ( e.getMessage().contains( \"slave\" ) ) { log.error( \"Slave server misconfigured: \" + e.getMessage() ); } throw e; }","preventionTips":["Register all slave servers in the job metadata","Verify variables in slave names resolve at runtime","Re-select slaves in Spoon after cluster changes","Test remote execution in staging before production"],"tags":["kettle","cluster","configuration"],"backgroundTag":"resource-not-found","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"}