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

  1. Call jobMeta.setName("unique-job-name") before remote execution.
  2. Load the job from a repository or file so its name is populated rather than building JobMeta in memory.
  3. Ensure the name is unique on the target Carte server to avoid conflicts with prior registrations.
  4. 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

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


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)