pentaho/pentaho-kettle · error · KettleException
Unable to save step information to the repository, id_step=
Error message
Unable to save step information to the repository, id_step=
What it means
NumberRangeMeta.saveRep() persists each rule's lower_bound/upper_bound/value attributes to the repository. A KettleDatabaseException thrown by rep.saveStepAttribute is wrapped in a KettleException with 'Unable to save step information to the repository, id_step=<id>'.
Solutions
- Inspect the chained KettleDatabaseException for the concrete SQL error.
- Verify repository DB connectivity, credentials, and write permissions.
- Retry the transformation save once the repository is healthy.
- Check for locks/schema issues and run upgrade scripts if versions differ.
Example fix
null
Defensive patterns
Strategy: retry
Validate before calling
// Verify repository write access / DB health before saving transformations
Try / catch
try { meta.saveRep(rep, metaStore, transId, stepId); } catch (KettleException e) { log.error("Save failed for step " + stepId + ": " + e.getCause(), e); /* exponential backoff retry */ } Prevention
- Monitor repository DB uptime and disk space.
- Use an account with INSERT/UPDATE rights on repository tables.
- Avoid saving over flaky VPN/network links.
- Run schema upgrade scripts after Pentaho upgrades.
When it happens
Trigger: saveRep(rep, metaStore, id_transformation, id_step) when a saveStepAttribute call raises KettleDatabaseException — DB down, write permissions, constraint failure.
Common situations: Repository database offline or network partition during save; read-only DB user; table lock or schema mismatch after upgrade; disk full on the repository host.
Related errors
- AppendMeta.Exception.UnableToSaveStepInfo
- CombinationLookupMeta.Exception.UnableToSaveStepInfo
- NormaliserMeta.Exception.UnableToSaveStepInfoToRepository
- NullIfMeta.Exception.UnableToSaveStepInfoToRepository
- AccessInputMeta.Exception.ErrorReadingRepository
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/610f546ab1a11581.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/numberrange/NumberRangeMeta.java:201
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
try {
rep.saveStepAttribute( id_transformation, id_step, "inputField", inputField );
rep.saveStepAttribute( id_transformation, id_step, "outputField", outputField );
rep.saveStepAttribute( id_transformation, id_step, "fallBackValue", getFallBackValue() );
int i = 0;
for ( NumberRangeRule rule : rules ) {
rep
.saveStepAttribute( id_transformation, id_step, i, "lower_bound", String
.valueOf( rule.getLowerBound() ) );
rep
.saveStepAttribute( id_transformation, id_step, i, "upper_bound", String
.valueOf( rule.getUpperBound() ) );
rep.saveStepAttribute( id_transformation, id_step, i, "value", String.valueOf( rule.getValue() ) );
i++;
}
} catch ( KettleDatabaseException dbe ) {
throw new KettleException( "Unable to save step information to the repository, id_step=" + id_step, dbe );
}
}
@Override
public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepinfo,
RowMetaInterface prev, String[] input, String[] output, RowMetaInterface info, VariableSpace space,
Repository repository, IMetaStore metaStore ) {
CheckResult cr;
if ( prev == null || prev.size() == 0 ) {
cr =
new CheckResult(
CheckResult.TYPE_RESULT_WARNING, "Not receiving any fields from previous steps!", stepinfo );
remarks.add( cr );
} else {
cr =
new CheckResult( CheckResult.TYPE_RESULT_OK, "Step is connected to previous one, receiving "
+ prev.size() + " fields", stepinfo );
remarks.add( cr );View on GitHub (pinned to f3058517a1)