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
- Inspect the nested (cause) exception in the KettleException stack trace to find the real repository read failure
- Verify the repository connection (URL, credentials, network) and retry loading the transformation
- Check the r_step_attribute rows for this step's id_step, especially the id_condition entry, and repair or delete corrupt rows
- 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
- Always log/inspect getCause() of KettleException from readRep
- Keep repository database connections healthy and backed up
- Avoid hand-editing repository attribute tables
- Pin consistent PDI versions across environments
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
- FlattenerMeta.Exception.UnexpectedErrorInReadingStepInfoFromRepository
- StringOperationsMeta.Exception.UnexpectedErrorInReadingStepI…
- SwitchCaseMeta.Exception.UnexpectedErrorInReadingStepInfoFromRepository
- Unexpected error reading step information from the…
- AppendMeta.Exception.UnexpectedErrorReadingStepInfo
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)