pentaho/pentaho-kettle · error · KettleException
error reading step with id_step= from the repository
Error message
error reading step with id_step= from the repository
What it means
NumberRangeMeta.readRep() loads the step's range rules from the repository, parsing stored lower_bound/upper_bound strings into doubles. Any failure (DB read error or unparseable numeric text) is wrapped in a KettleException with 'error reading step with id_step=<id> from the repository'.
Solutions
- Inspect getCause(): if it is a NumberFormatException, fix the stored lower_bound/upper_bound attribute values in R_STEP_ATTRIBUTE to plain doubles.
- Verify repository connectivity and that id_step exists.
- Re-save the step from Spoon so bounds are rewritten in canonical format.
- Restore corrupted repository rows from backup.
Example fix
// before (repository attribute) lower_bound = 0,5 // after lower_bound = 0.5
Defensive patterns
Strategy: try-catch
Validate before calling
// Before readRep, sanity-check stored bounds in R_STEP_ATTRIBUTE are numeric
Type guard
boolean isParseableDouble(String s) { if (s == null) return false; try { Double.parseDouble(s.trim()); return true; } catch (NumberFormatException e) { return false; } } Try / catch
try { meta.readRep(rep, metaStore, idStep, databases); } catch (KettleException e) { log.error("Number Range readRep failed for " + idStep + ": " + e.getCause(), e); } Prevention
- Never edit R_STEP_ATTRIBUTE rows by hand; re-save via Spoon instead.
- Check getCause() to distinguish NumberFormatException from DB failures.
- Test repository connectivity before loads.
- Back up repository metadata before manual fixes.
When it happens
Trigger: readRep(rep, metaStore, id_step) throwing when getStepAttributeString fails or Double.parseDouble rejects a stored bound value.
Common situations: Repository attributes hand-edited or written by a version using a different number format; repository DB connectivity loss; missing id_step / corrupted attribute rows.
Understand the failure class
Background: Database query failed: Internal Server Error 500s wrapping SQL, Prisma, and connection failures — what to check first — this error's family across 16 libraries.
Related errors
- AppendMeta.Exception.UnexpectedErrorReadingStepInfo
- CombinationLookupMeta.Exception.UnexpectedErrorWhileReadingS…
- DynamicSQLRowMeta.Exception.UnexpectedErrorReadingStepInfo
- ExecProcessMeta.Exception.UnexpectedErrorReadingStepInfo
- ExecSQLRowMeta.Exception.UnexpectedErrorReadingStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/4f310608f5aeec84.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/numberrange/NumberRangeMeta.java:178
outputField = rep.getStepAttributeString( id_step, "outputField" );
emptyRules();
String fallBackValue = rep.getStepAttributeString( id_step, "fallBackValue" );
setFallBackValue( fallBackValue );
int nrfields = rep.countNrStepAttributes( id_step, "lower_bound" );
for ( int i = 0; i < nrfields; i++ ) {
String lowerBoundStr = rep.getStepAttributeString( id_step, i, "lower_bound" );
String upperBoundStr = rep.getStepAttributeString( id_step, i, "upper_bound" );
String value = rep.getStepAttributeString( id_step, i, "value" );
double lowerBound = Double.parseDouble( lowerBoundStr );
double upperBound = Double.parseDouble( upperBoundStr );
addRule( lowerBound, upperBound, value );
}
} catch ( Exception dbe ) {
throw new KettleException( "error reading step with id_step=" + id_step + " from the repository", dbe );
}
}
@Override
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() ) );View on GitHub (pinned to f3058517a1)