pentaho/pentaho-kettle · error · KettleException
Unable to save step information to the repository for…
Error message
Unable to save step information to the repository for id_step= + id_step
What it means
ClosureGeneratorMeta.saveRep writes the step's settings (parent_id_field, child_id_field, distance_field, is_root_zero) to the Pentaho Repository. Any repository write failure is rethrown as a KettleException whose message includes the failing id_step. It means the step's metadata could not be persisted.
Solutions
- Check repository DB connectivity and write privileges
- Free DB disk space or unlock read-only state
- Retry the save; fall back to exporting as XML
- Inspect repository DB error logs
Defensive patterns
Strategy: try-catch
Validate before calling
if (repository.isReadOnly()) throw new IllegalStateException("Repository is read-only"); Try / catch
try {
transMeta.save(rep, metaStore, comment);
} catch (KettleException e) {
if (e.getMessage().contains("Unable to save step information")) {
log.error("Save failed for id_step in message; export to XML as fallback", e);
}
} Prevention
- Confirm DB write privileges before saving
- Monitor repository DB disk space
- Export XML copies as backup
When it happens
Trigger: Saving a transformation to the repository when rep.saveStepAttribute throws — DB write failure, constraint violation, insufficient privileges.
Common situations: Read-only repository DB, disk-full on the DB server, DB user lacking INSERT privileges on R_STEP_ATTRIBUTE.
Related errors
- CloneRowMeta.Exception.UnexpectedErrorSavingStepInfo
- AbortMeta.Exception.UnableToSaveStepInfoToRepository
- AccessInputMeta.Exception.ErrorSavingToRepository
- AddSequenceMeta.Exception.UnableToSaveStepInfo
- CloneRowMeta.Exception.UnexpectedErrorReadingStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/09a5cf282f07ffd5.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/closure/ClosureGeneratorMeta.java:154
parentIdFieldName = rep.getStepAttributeString( id_step, "parent_id_field" );
childIdFieldName = rep.getStepAttributeString( id_step, "child_id_field" );
distanceFieldName = rep.getStepAttributeString( id_step, "distance_field" );
rootIdZero = rep.getStepAttributeBoolean( id_step, "is_root_zero" );
} catch ( Exception e ) {
throw new KettleException( "Unexpected error reading step information from the repository", e );
}
}
@Override
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step )
throws KettleException {
try {
rep.saveStepAttribute( id_transformation, id_step, "parent_id_field", parentIdFieldName );
rep.saveStepAttribute( id_transformation, id_step, "child_id_field", childIdFieldName );
rep.saveStepAttribute( id_transformation, id_step, "distance_field", distanceFieldName );
rep.saveStepAttribute( id_transformation, id_step, "is_root_zero", rootIdZero );
} catch ( Exception e ) {
throw new KettleException( "Unable to save step information to the repository for id_step=" + id_step, e );
}
}
@Override
public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepMeta,
RowMetaInterface prev, String[] input, String[] output, RowMetaInterface info, VariableSpace space,
Repository repository, IMetaStore metaStore ) {
CheckResult cr;
ValueMetaInterface parentValueMeta = prev.searchValueMeta( parentIdFieldName );
if ( parentValueMeta != null ) {
cr =
new CheckResult(
CheckResultInterface.TYPE_RESULT_ERROR, "The fieldname of the parent id could not be found.",
stepMeta );
remarks.add( cr );
} else {
cr =View on GitHub (pinned to f3058517a1)