pentaho/pentaho-kettle · error · KettleException

RunConfigurationRunExtensionPoint.ConfigNotFound.Error

RunConfigurationRunExtensionPoint.ConfigNotFound.Error

Error message

RunConfigurationRunExtensionPoint.ConfigNotFound.Error

What it means

RunConfigurationRunExtensionPoint.callExtensionPoint() throws this KettleException when the execution configuration does not reference a run configuration that exists in the available run configuration manager(s). PDI cannot find the named run configuration, so the transformation/job execution cannot proceed under that configuration.

Solutions

  1. Create a run configuration with the exact name referenced by the transformation/job properties
  2. Copy the missing run configuration from the previous project to the current one (Run Configuration dialog > copy)
  3. Reopen the transformation and select a different, existing run configuration in its properties
  4. Check which project (bowl) is active and ensure the run configuration is stored in its scope
Defensive patterns

Strategy: validation

Validate before calling

RunConfigurationService svc = bowl.getManager( RunConfigurationService.class );
boolean exists = java.util.Arrays.stream( svc.getNames() )
  .anyMatch( n -> n.equalsIgnoreCase( execConfig.getRunConfiguration() ) );
if ( !exists ) {
  // create or select a valid run configuration before executing
}

Try / catch

try {
  extensionPoint.callExtensionPoint( log, object );
} catch ( KettleException e ) {
  if ( e.getMessage().contains( "ConfigNotFound" ) ) {
    // re-check run configuration name against the active project's manager
  }
}

Prevention

When it happens

Trigger: Executing a transformation or job whose ExecutionConfiguration.getRunConfiguration() names a run configuration that is not registered — the manager lookup returns nothing matching the name.

Common situations: After switching projects (bowls) where the run configuration lives in another project's local scope, after renaming/deleting a run configuration, or migrating transformations between environments without copying the run configurations.

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/0f7bb564299405a9. Report an issue: GitHub.

Appendix: source

Thrown at plugins/engine-configuration/impl/src/main/java/org/pentaho/di/engine/configuration/impl/extension/RunConfigurationRunExtensionPoint.java:79

    if ( runConfiguration == null ) {
      RunConfigurationService embeddedRunConfigurationManager =
        EmbeddedRunConfigurationManager.build( embeddedMetaStore );
      runConfiguration = embeddedRunConfigurationManager.load( executionConfiguration.getRunConfiguration() );
    }

    if ( runConfiguration != null ) {
      RunConfigurationExecutor runConfigurationExecutor =
        runConfigurationManager.getExecutor( runConfiguration.getType() );

      if ( runConfigurationExecutor != null ) {
        runConfigurationExecutor.execute( runConfiguration, executionConfiguration, meta, variableSpace, repository );
      }
    } else {
      String name = "";
      if ( variableSpace instanceof TransMeta ) {
        name = ( (TransMeta) variableSpace ).getFilename();
      }
      throw new KettleException( BaseMessages
        .getString( PKG, "RunConfigurationRunExtensionPoint.ConfigNotFound.Error", name,
          executionConfiguration.getRunConfiguration(), "{0}" ) );
    }
  }

  @VisibleForTesting
  void setRunConfigurationManagerProvider ( Function<Bowl, RunConfigurationService> provider ) {
    this.rcmProvider = provider;
  }

  private RunConfigurationService getRunConfigurationManager( Bowl bowl ) throws KettleException {
    if ( rcmProvider != null ) {
      return rcmProvider.apply( bowl );
    }

    // ensure the factory is initialized so that the managers are registered to the bowl
    RunConfigurationProviderFactoryManagerImpl.getInstance();
    Bowl sourceBowl = bowl != null ? bowl : DefaultBowl.getInstance();

View on GitHub (pinned to f3058517a1)