pentaho/pentaho-kettle · error · KettleException
BlockUntilStepsFinish.Error.NotSteps
BlockUntilStepsFinish.Error.NotSteps
Error message
BlockUntilStepsFinish.Error.NotSteps
What it means
BlockUntilStepsFinish.processRow requires at least one step name configured to wait on. If the step metadata has no step names, it throws a KettleException with the localized message BlockUntilStepsFinish.Error.NotSteps, aborting the step.
Solutions
- Edit the BlockUntilStepsFinish step and add at least one step to wait for.
- Verify the transformation XML/repository contains the step_name attributes for this step.
- Re-add and configure the step if its settings were lost.
- Add transformation-level validation before run (e.g. checking meta in a test harness).
Example fix
// before (empty config in transformation XML) <step_name/> // after <step_name>Sort rows</step_name>
Defensive patterns
Strategy: validation
Validate before calling
// before executing the transformation
BlockUntilStepsFinishMeta m = (BlockUntilStepsFinishMeta) stepMeta.getStepMetaInterface();
if (m.getStepName() == null || m.getStepName().length == 0) {
throw new IllegalStateException("BlockUntilStepsFinish step '" + stepMeta.getName()
+ "' has no steps configured to wait for");
} Try / catch
try {
trans.execute(null);
} catch (KettleException e) {
if (e.getMessage() != null && e.getMessage().contains("BlockUntilStepsFinish.Error.NotSteps")) {
log.error("Configure the wait-for-steps list on the BlockUntilStepsFinish step");
} else { throw e; }
} Prevention
- Always configure the wait list immediately after adding the step.
- Review transformation XML/repository for empty step_name entries after migrations.
- Re-create the step if its configuration was lost in copy/paste.
- Add pre-run metadata validation in CI harnesses.
When it happens
Trigger: Executing a transformation whose BlockUntilStepsFinish step has an empty 'wait for steps' list (meta.getStepName() null or length 0).
Common situations: Step added to a transformation but never configured, configuration lost after a copy/paste or metadata migration, or settings cleared when the referenced steps were deleted.
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
- AccessInput.Exception.CouldnotFindField
- AccessInput.Log.NoField
- AddSequence.Exception.NoSpecifiedMethod
- At this time we don't support the use of multiple cluster…
- AutoDoc.Exception.FilenameFieldNotFound
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/9d9c9649f6ea1543.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/blockuntilstepsfinish/BlockUntilStepsFinish.java:63
public BlockUntilStepsFinish( StepMeta stepMeta, StepDataInterface stepDataInterface, int copyNr,
TransMeta transMeta, Trans trans ) {
super( stepMeta, stepDataInterface, copyNr, transMeta, trans );
}
public boolean processRow( StepMetaInterface smi, StepDataInterface sdi ) throws KettleException {
meta = (BlockUntilStepsFinishMeta) smi;
data = (BlockUntilStepsFinishData) sdi;
if ( first ) {
first = false;
String[] stepnames = null;
int stepnrs = 0;
if ( meta.getStepName() != null && meta.getStepName().length > 0 ) {
stepnames = meta.getStepName();
stepnrs = stepnames.length;
} else {
throw new KettleException( BaseMessages.getString( PKG, "BlockUntilStepsFinish.Error.NotSteps" ) );
}
// Get target stepnames
String[] targetSteps = getTransMeta().getNextStepNames( getStepMeta() );
data.stepInterfaces = new ConcurrentHashMap<Integer, StepInterface>();
for ( int i = 0; i < stepnrs; i++ ) {
// We can not get metrics from current step
if ( stepnames[i].equals( getStepname() ) ) {
throw new KettleException( "You can not wait for step [" + stepnames[i] + "] to finish!" );
}
if ( targetSteps != null ) {
// We can not metrics from the target steps
for ( int j = 0; j < targetSteps.length; j++ ) {
if ( stepnames[i].equals( targetSteps[j] ) ) {
throw new KettleException( "You can not get metrics for the target step [" + targetSteps[j] + "]!" );
}
}
}View on GitHub (pinned to f3058517a1)