pentaho/pentaho-kettle · error · KettleException

DefaultRunConfigurationExecutor.RemoteNotFound.Error

DefaultRunConfigurationExecutor.RemoteNotFound.Error

Error message

DefaultRunConfigurationExecutor.RemoteNotFound.Error

What it means

DefaultRunConfigurationExecutor.setSlaveServer() throws this KettleException when the run configuration selected for remote execution does not resolve to an actual slave server (slaveServer == null). The executor needs a remote Carte server to send the transformation/job to, and none was found for the configured server name.

Solutions

  1. Define the slave server referenced by the run configuration (Tools > Slave servers) with the exact name
  2. Edit the run configuration and select an existing, defined slave server
  3. Verify cluster schema definitions include the referenced slave server
  4. If local execution was intended, change the run configuration's execution location from Remote to Local
Defensive patterns

Strategy: validation

Validate before calling

boolean slaveExists = transMeta.getSlaveServers().stream()
  .anyMatch( s -> s.getName().equalsIgnoreCase( runConfig.getServer() ) );
if ( !slaveExists ) {
  throw new IllegalArgumentException(
    "Run configuration references unknown slave server: " + runConfig.getServer() );
}

Try / catch

try {
  executor.configureTransExecution( execConfig, meta, ... );
} catch ( KettleException e ) {
  if ( e.getMessage().contains( "RemoteNotFound" ) ) {
    // fall back to local execution or prompt for a valid slave server
  }
}

Prevention

When it happens

Trigger: configureTransExecution()/configureJobExecution() applying a run configuration whose getServer() names a slave server that is not defined in the cluster schema / slave server list, so setSlaveServer() receives null.

Common situations: Migrating transformations between environments where the target has no matching slave server definition, deleted or renamed Carte slave servers, or run configurations pointing at servers defined only in another project.

Understand the failure class

Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/d9a1fd67cadfe25d. Report an issue: GitHub.

Appendix: source

Thrown at plugins/engine-configuration/impl/src/main/java/org/pentaho/di/engine/configuration/impl/pentaho/DefaultRunConfigurationExecutor.java:118

      setSlaveServer( jobExecutionConfiguration, meta, defaultRunConfiguration, variableSpace );
    }
    jobExecutionConfiguration.setPassingExport( defaultRunConfiguration.isSendResources() );
    if ( defaultRunConfiguration.isPentaho() && repository != null ) {
      sendNow( repository, (AbstractMeta) variableSpace );
    }
  }

  private void setSlaveServer( ExecutionConfiguration executionConfiguration, AbstractMeta meta,
                               DefaultRunConfiguration defaultRunConfiguration,
                               VariableSpace variableSpace ) throws KettleException {
    SlaveServer slaveServer = meta.findSlaveServer( defaultRunConfiguration.getServer() );
    executionConfiguration.setRemoteServer( slaveServer );
    if ( slaveServer == null ) {
      String filename = "";
      if ( variableSpace instanceof AbstractMeta ) {
        filename = ( (AbstractMeta) variableSpace ).getFilename();
      }
      throw new KettleException( BaseMessages
        .getString( PKG, "DefaultRunConfigurationExecutor.RemoteNotFound.Error", filename,
          defaultRunConfiguration.getName(), "{0}", defaultRunConfiguration.getServer() ) );
    }
  }

  private void sendNow( Repository repository, AbstractMeta meta ) {
    try {
      if ( meta instanceof TransMeta ) {
        Spoon.getInstance().getActiveTransGraph().handleTransMetaChanges( (TransMeta) meta );
      } else {
        Spoon.getInstance().getActiveJobGraph().handleJobMetaChanges( (JobMeta) meta );
      }
    } catch ( Exception e ) {
      // Ignore an exception if occurs
    }

    if ( !meta.hasChanged() ) {
      SchedulerRequest.Builder builder = new SchedulerRequest.Builder();

View on GitHub (pinned to f3058517a1)