pentaho/pentaho-kettle · error · KettleStepException

BaseStep.Exception.SourceStepToReadFromDoesntExist

BaseStep.Exception.SourceStepToReadFromDoesntExist

Error message

BaseStep.Exception.SourceStepToReadFromDoesntExist

What it means

findInputRowSet(String sourceStep) resolves the named step in the transformation metadata via transMeta.findStep and throws KettleStepException when no step with that name exists. This API is used by steps that dynamically read rows from another step's row set (e.g. 'Read all source steps' style plugins).

Solutions

  1. Correct the step name in the consuming step's configuration to exactly match a step in this transformation.
  2. Verify with transMeta.findStep(name) or open the transformation and copy-paste the step name to avoid typos.
  3. If the step was renamed, re-open the plugin/mapping dialog and re-select the source step.
  4. In custom code, resolve the step via a variable/parameter set at runtime instead of a hard-coded name.

Example fix

// before
RowSet rs = findInputRowSet("Staging 1"); // renamed to 'Staging 2'
// after
RowSet rs = findInputRowSet(environmentSubstitute("${SOURCE_STEP}"));
Defensive patterns

Strategy: validation

Validate before calling

if (transMeta.findStep(sourceStepName) == null) throw new IllegalArgumentException("Step '" + sourceStepName + "' not found in transformation");

Try / catch

try { RowSet rs = findInputRowSet(sourceStepName); } catch (KettleStepException e) { if (e.getMessage().contains("exist")) { logError("Source step name invalid: " + sourceStepName); } throw e; }

Prevention

When it happens

Trigger: Calling BaseStep.findInputRowSet("SomeStep") (or a plugin configured with a source step name) where the name does not match any step in the current transformation: typo, renamed step, or step living in a different transformation.

Common situations: Step name changed in the canvas after the consuming step's dialog captured the old name; a sub-transformation/mapping where the referenced step isn't visible; hard-coded step name in custom plugin code.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/step/BaseStep.java:2397

        }
      }
    }
  }

  /**
   * Find input row set.
   *
   * @param sourceStep the source step
   * @return the row set
   * @throws KettleStepException the kettle step exception
   */
  public RowSet findInputRowSet( String sourceStep ) throws KettleStepException {
    // Check to see that "sourceStep" only runs in a single copy
    // Otherwise you'll see problems during execution.
    //
    StepMeta sourceStepMeta = transMeta.findStep( sourceStep );
    if ( sourceStepMeta == null ) {
      throw new KettleStepException( BaseMessages.getString(
        PKG, "BaseStep.Exception.SourceStepToReadFromDoesntExist", sourceStep ) );
    }

    if ( sourceStepMeta.getCopies() > 1 ) {
      throw new KettleStepException( BaseMessages.getString(
        PKG, "BaseStep.Exception.SourceStepToReadFromCantRunInMultipleCopies", sourceStep, Integer
          .toString( sourceStepMeta.getCopies() ) ) );
    }

    return findInputRowSet( sourceStep, 0, getStepname(), getCopy() );
  }

  /**
   * Find input row set.
   *
   * @param from     the from
   * @param fromcopy the fromcopy
   * @param to       the to

View on GitHub (pinned to f3058517a1)