pentaho/pentaho-kettle · error · KettleException

FilterRowsMeta.Exception.UnexpectedErrorInReadingStepInfoFromRepository

FilterRowsMeta.Exception.UnexpectedErrorInReadingStepInfoFromRepository

Error message

FilterRowsMeta.Exception.UnexpectedErrorInReadingStepInfoFromRepository

What it means

FilterRowsMeta.readRep wraps any exception raised while reading the Filter Rows step's attributes (true/false target stepnames and the stored condition) from the repository in a KettleException using this message key. It signals the step definition could not be restored from the repository, not a runtime data problem. The original cause is chained as the nested exception.

Solutions

  1. Inspect the nested (cause) exception in the KettleException stack trace to find the real repository read failure
  2. Verify the repository connection (URL, credentials, network) and retry loading the transformation
  3. Check the r_step_attribute rows for this step's id_step, especially the id_condition entry, and repair or delete corrupt rows
  4. If the transformation is damaged, re-open/re-save it from a working copy or restore from repository backup

Example fix

// before
condition = rep.loadConditionFromStepAttribute( id_step, "id_condition" ); // throws NPE if missing
// after
condition = rep.loadConditionFromStepAttribute( id_step, "id_condition" );
if ( condition == null ) {
  condition = new Condition(); // default empty condition instead of failing
}
Defensive patterns

Strategy: try-catch

Validate before calling

// before loading
if ( rep != null && rep.isConnected() ) {
  // proceed with transMeta = new TransMeta(rep, ...)
}

Try / catch

try {
  filterRowsMeta.readRep( rep, metaStore, idStep, databases, metaStore );
} catch ( KettleException e ) {
  logError( "Step load failed: " + e.getCause(), e ); // act on the chained cause
}

Prevention

When it happens

Trigger: Calling readRep on a FilterRowsMeta when rep.getStepAttributeString fails, the 'id_condition' attribute is missing/corrupt, loadConditionFromStepAttribute throws, or the repository connection fails mid-read.

Common situations: Corrupted or manually edited repository rows for the transformation; a repository schema/version mismatch where condition attributes were written by a different Kettle version; network drops to a database repository while loading a transformation.

Understand the failure class

Background: "failed to read file", EACCES, ENOENT and "could not read <path>" errors: when a program can't read a file from disk — this error's family across 49 libraries.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/filterrows/FilterRowsMeta.java:206

        PKG, "FilterRowsMeta.Exception..UnableToLoadStepInfoFromXML" ), e );
    }
  }

  public void setDefault() {
    allocate();
  }

  public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases ) throws KettleException {
    try {
      allocate();

      setTrueStepname( rep.getStepAttributeString( id_step, "send_true_to" ) );
      setFalseStepname( rep.getStepAttributeString( id_step, "send_false_to" ) );

      condition = rep.loadConditionFromStepAttribute( id_step, "id_condition" );

    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "FilterRowsMeta.Exception.UnexpectedErrorInReadingStepInfoFromRepository" ), e );
    }
  }

  @Override
  public void searchInfoAndTargetSteps( List<StepMeta> steps ) {
    List<StreamInterface> targetStreams = getStepIOMeta().getTargetStreams();
    for ( StreamInterface stream : targetStreams ) {
      stream.setStepMeta( StepMeta.findStep( steps, (String) stream.getSubject() ) );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
    try {
      if ( condition != null ) {
        rep.saveConditionStepAttribute( id_transformation, id_step, "id_condition", condition );
        rep.saveStepAttribute( id_transformation, id_step, "send_true_to", getTrueStepname() );
        rep.saveStepAttribute( id_transformation, id_step, "send_false_to", getFalseStepname() );

View on GitHub (pinned to f3058517a1)