pentaho/pentaho-kettle · error · KettleException
The job needs a name to uniquely identify it by on the…
Error message
The job needs a name to uniquely identify it by on the remote server.
What it means
sendToSlaveServer() throws this KettleException when jobMeta.getName() is empty. The job name is the unique identifier used to register and address the job on the remote Carte server, so an unnamed job cannot be posted remotely.
Solutions
- Call jobMeta.setName("unique-job-name") before remote execution.
- Load the job from a repository or file so its name is populated rather than building JobMeta in memory.
- Ensure the name is unique on the target Carte server to avoid conflicts with prior registrations.
- Add a pre-flight check: if Utils.isEmpty(jobMeta.getName()) reject before calling sendToSlaveServer.
Example fix
// before
JobMeta jobMeta = new JobMeta();
Job.sendToSlaveServer(jobMeta, execCfg, repo, metaStore); // throws
// after
JobMeta jobMeta = new JobMeta();
jobMeta.setName("nightly-etl-" + System.currentTimeMillis());
Job.sendToSlaveServer(jobMeta, execCfg, repo, metaStore); Defensive patterns
Strategy: validation
Validate before calling
if (Utils.isEmpty(jobMeta.getName())) {
jobMeta.setName("job-" + UUID.randomUUID());
} Try / catch
try {
Job.sendToSlaveServer(jobMeta, execCfg, repo, metaStore);
} catch (KettleException e) {
if (Utils.isEmpty(jobMeta.getName())) {
jobMeta.setName("default-job");
return Job.sendToSlaveServer(jobMeta, execCfg, repo, metaStore);
}
throw e;
} Prevention
- Enforce setName() immediately after constructing JobMeta in code.
- Add a preflight assert on jobMeta.getName() before any remote call.
- Prefer loading jobs from repository/file so names are always populated.
- Make names unique per Carte server to avoid registration clashes.
When it happens
Trigger: Calling Job.sendToSlaveServer() with a JobMeta whose name was never set (e.g. a job built in code via new JobMeta() without setName(), or an unnamed in-memory transformation/job submitted remotely).
Common situations: Programmatically generated jobs never named before remote submission; jobs loaded from sources that don't set a name; duplicates allowed locally but the remote servlet requires a unique name.
Understand the failure class
Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.
Related errors
- No slave server specified
- The transformation needs a name to uniquely identify it by…
- A connection of type PALO is expected
- A connection of type PALO is expected
- A server socket allocation always has to accompanied by a…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/202aa6564ece190e.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/Job.java:1724
* the execution configuration
* @param repository
* the repository
* @param metaStore
* the metaStore
* @return the string
* @throws KettleException
* the kettle exception
*/
public static String sendToSlaveServer( JobMeta jobMeta, JobExecutionConfiguration executionConfiguration,
Repository repository, IMetaStore metaStore ) throws KettleException {
String carteObjectId;
SlaveServer slaveServer = executionConfiguration.getRemoteServer();
if ( slaveServer == null ) {
throw new KettleException( BaseMessages.getString( PKG, "Job.Log.NoSlaveServerSpecified" ) );
}
if ( Utils.isEmpty( jobMeta.getName() ) ) {
throw new KettleException( BaseMessages.getString( PKG, "Job.Log.UniqueJobName" ) );
}
// Align logging levels between execution configuration and remote server
slaveServer.getLogChannel().setLogLevel( executionConfiguration.getLogLevel() );
try {
// Inject certain internal variables to make it more intuitive.
//
for ( String var : Const.INTERNAL_TRANS_VARIABLES ) {
executionConfiguration.getVariables().put( var, jobMeta.getVariable( var ) );
}
for ( String var : Const.INTERNAL_JOB_VARIABLES ) {
executionConfiguration.getVariables().put( var, jobMeta.getVariable( var ) );
}
if ( executionConfiguration.isPassingExport() ) {
// First export the job... slaveServer.getVariable("MASTER_HOST")
//View on GitHub (pinned to f3058517a1)