pentaho/pentaho-kettle · error · KettleException
FilterRowsMeta.Exception.UnableToSaveStepInfoToRepository
FilterRowsMeta.Exception.UnableToSaveStepInfoToRepository
Error message
FilterRowsMeta.Exception.UnableToSaveStepInfoToRepository
What it means
FilterRowsMeta.saveRep wraps any exception raised while persisting the step's attributes (condition, send_true_to, send_false_to) to the repository in a KettleException with this message key, appending the id_step. It means the step definition could not be saved; the cause is chained.
Solutions
- Check the chained cause for the underlying repository write error (connection, permissions, disk)
- Verify the repository is writable and the user has INSERT/UPDATE rights on repository tables
- Reconnect to the repository and re-save the transformation
- If a condition cannot be serialized, clear/recreate the filter condition in the dialog and save again
Example fix
// before
rep.saveConditionStepAttribute( id_transformation, id_step, "id_condition", null ); // NPE wrapped in saveRep
// after
if ( getCondition() != null ) {
rep.saveConditionStepAttribute( id_transformation, id_step, "id_condition", getCondition() );
} Defensive patterns
Strategy: try-catch
Validate before calling
// before saving
if ( !rep.isConnected() || rep.isReadOnly() ) { throw new IllegalStateException( "Repository not writable" ); } Try / catch
try {
transMeta.saveRep( rep, metaStore, "my transformation" );
} catch ( KettleException e ) {
logError( "Save failed for step " + e.getMessage() + ": " + e.getCause(), e );
// fall back to local .ktr export
} Prevention
- Verify repository write permissions before bulk edits
- Save a local .ktr copy as fallback
- Monitor repository DB disk space and connectivity
- Reconnect/re-authenticate after long editing sessions
When it happens
Trigger: Calling saveRep on a FilterRowsMeta when saveConditionStepAttribute or saveStepAttribute throws — repository write failure, lost connection, constraint violation, or insufficient repository permissions during transformation save.
Common situations: Database repository disk full or connection dropped mid-save; missing INSERT privileges on repository tables; saving to a read-only repository; concurrent edits causing key conflicts.
Understand the failure class
Background: "failed to write file", "Could not save figure", "Error saving remote file" — file write failed: causes and fixes across languages and libraries — this error's family across 38 libraries.
Related errors
- StringOperationsMeta.Exception.UnableToSaveStepInfo
- SwitchCaseMeta.Exception.UnableToSaveStepInfoToRepository
- Unable to save step information to the repository for…
- AppendMeta.Exception.UnableToSaveStepInfo
- ColumnExistsMeta.Exception.UnableToSaveStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/8161c3d58603af43.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/filterrows/FilterRowsMeta.java:227
}
@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() );
}
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString(
PKG, "FilterRowsMeta.Exception.UnableToSaveStepInfoToRepository" )
+ id_step, e );
}
}
@Override
public void getFields( Bowl bowl, RowMetaInterface rowMeta, String origin, RowMetaInterface[] info, StepMeta nextStep,
VariableSpace space, Repository repository, IMetaStore metaStore ) throws KettleStepException {
// Clear the sortedDescending flag on fields used within the condition - otherwise the comparisons will be
// inverted!!
String[] conditionField = condition.getUsedFields();
for ( int i = 0; i < conditionField.length; i++ ) {
int idx = rowMeta.indexOfValue( conditionField[i] );
if ( idx >= 0 ) {
ValueMetaInterface valueMeta = rowMeta.getValueMeta( idx );
valueMeta.setSortedDescending( false );
}
}View on GitHub (pinned to f3058517a1)