pentaho/pentaho-kettle · error · RuntimeException
Unexpected error in calling extension point upon step finish
Error message
Unexpected error in calling extension point upon step finish
What it means
When a step in the transformation finishes, Trans registers a StepListener whose stepFinished() callback fires the StepFinished extension point. If that extension point plugin throws a KettleException, it is wrapped in a RuntimeException with this message. As with 1160, the step/transformation ran; the failure is in a plugin observing the step-finish event.
Solutions
- Inspect the cause exception to identify the failing StepFinished extension point plugin
- Fix the plugin's handling of the Trans/StepMeta/StepInterface combination passed to it
- Update or remove the offending plugin from plugins/
- Add internal try/catch + logging in the plugin so step-finish failures do not propagate
Example fix
// before
public void stepFinished(Trans trans, StepMeta stepMeta, StepInterface step) {
plugin.notify(step);
}
// after
public void stepFinished(Trans trans, StepMeta stepMeta, StepInterface step) {
try { plugin.notify(step); }
catch (Exception e) { trans.getLogChannel().logError("StepFinished plugin failed", e); }
} Defensive patterns
Strategy: try-catch
Validate before calling
// verify step-finish plugins before run KettleExtensionPoint.StepFinished.getExtensions(); // inspect registered plugin ids and their health
Type guard
boolean isStepFinishPluginError(RuntimeException e) {
return "Unexpected error in calling extension point upon step finish".equals(e.getMessage());
} Try / catch
try {
trans.execute(args); trans.waitUntilFinished();
} catch (RuntimeException e) {
if ("Unexpected error in calling extension point upon step finish".equals(e.getMessage())) {
log.warn("StepFinished extension point plugin failed", e.getCause());
} else throw e;
} Prevention
- Register only well-tested StepFinished listeners
- Ensure plugin code does not assume specific step types in the Trans/StepMeta/StepInterface combi
- Pin plugin versions to the Kettle release
- Wrap listener bodies in internal error handling
When it happens
Trigger: A plugin registered under KettleExtensionPoint.StepFinished throws a KettleException from its callExtensionPoint() while processing the step-finished event for any step in the transformation.
Common situations: Custom step-finish audit/notification plugins failing on network or DB access; plugin code assuming a different object type in the 'combi' (StepMeta/StepInterface) argument; version-mismatched plugin APIs.
Related errors
- Error calling extension point at end of transformation
- Could not create ValueMetaInterface
- No compression provider found with name =
- ScriptValuesMetaMod.Exception.UnableToParseXMLforAdditionalC…
- ScriptValuesMetaMod.Exception.UnableToLoadAdditionalClass
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/2dd1ca0f255d8be9.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/Trans.java:1569
// Now start all the threads...
//
for ( int i = 0; i < steps.size(); i++ ) {
final StepMetaDataCombi combi = steps.get( i );
RunThread runThread = new RunThread( combi );
Thread thread = new Thread( runThread );
thread.setName( getName() + " - " + combi.stepname );
ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.StepBeforeStart.id, combi );
// Call an extension point at the end of the step
//
combi.step.addStepListener( new StepAdapter() {
@Override
public void stepFinished( Trans trans, StepMeta stepMeta, StepInterface step ) {
try {
ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.StepFinished.id, combi );
} catch ( KettleException e ) {
throw new RuntimeException( "Unexpected error in calling extension point upon step finish", e );
}
}
} );
thread.start();
}
break;
case SerialSingleThreaded:
new Thread( new Runnable() {
@Override
public void run() {
try {
// Always disable thread priority management, it will always slow us
// down...
//
for ( StepMetaDataCombi combi : steps ) {View on GitHub (pinned to f3058517a1)