pentaho/pentaho-kettle · error · KettleException
Unexpected error reading step information from the…
Error message
Unexpected error reading step information from the repository
What it means
StepMetastructureMeta.readRep wraps any exception thrown while loading this step's saved attributes (outputRowcount, rowcountField) from the Kettle repository in a KettleException with this generic message. It is a catch-all around repository I/O, so the root cause is always in the attached cause. The library throws it to signal that transformation metadata for this step could not be deserialized from the repository.
Solutions
- Inspect the cause (e.getCause()) of the KettleException — fix the underlying repository connectivity/SQL error first.
- Verify the repository connection (host, port, credentials) and that the repository database is up.
- Re-open the transformation; if the step attributes are missing, re-save the step or re-create it in Spoon.
- Check repository table integrity (r_step_attribute) and user permissions if errors persist.
Example fix
// before: opaque failure, cause ignored
} catch ( Exception e ) {
throw new KettleException( "Unexpected error reading step information from the repository", e );
}
// after: log cause and fail with a clear step/ID context
} catch ( Exception e ) {
logError("Failed to read StepMetastructure attributes for id_step=" + id_step, e);
throw new KettleException( "Unexpected error reading step information from the repository for id_step=" + id_step, e );
} Defensive patterns
Strategy: try-catch
Validate before calling
// before loadRep/readRep, verify repository connectivity
if (rep == null || !rep.getConnection().equals(expectedConnection)) {
throw new KettleException("Repository not connected before reading step metadata");
} Try / catch
try {
stepMeta.readRep(rep, metaStore, idStep, databases);
} catch (KettleException e) {
Throwable root = e; while (root.getCause() != null) root = root.getCause();
log.error("Repository read failed for id_step=" + idStep + ": " + root.getMessage(), root);
throw e;
} Prevention
- Check repository connectivity before loading transformations.
- Always log/diagnose the cause chain of KettleException from readRep.
- Use file repositories or version-controlled XML for critical metadata to avoid DB-side issues.
When it happens
Trigger: Any Exception from rep.getStepAttributeBoolean(id_step, "outputRowcount") or rep.getStepAttributeString(id_step, "rowcountField") during readRep — e.g. repository connection dropped mid-read, id_step no longer exists in r_step_attribute, or the repository is a database repository whose tables are locked/corrupt.
Common situations: Opening or editing a transformation stored in a database repository while the repository DB is unreachable or restarted; a stale id_step after someone deleted/re-imported the transformation; repository table corruption or permission problems.
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
- ScriptValuesMetaMod.Exception.UnexpectedErrorInReadingStepIn…
- Unexpected error reading step information from the…
- AbsSecurityProvider.ERROR_0002_UNABLE_TO_ACCESS_IS_ALLOWED
- AccessInputMeta.Exception.ErrorReadingRepository
- AddSequenceMeta.Exception.UnableToReadStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/4d4de8ec7793b252.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/stepmeta/StepMetastructureMeta.java:97
}
private void readData( Node stepnode ) throws KettleXMLException {
try {
outputRowcount = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "outputRowcount" ) );
rowcountField = XMLHandler.getTagValue( stepnode, "rowcountField" );
} catch ( Exception e ) {
throw new KettleXMLException( "Unable to load step info from XML", e );
}
}
@Override
public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases ) throws KettleException {
try {
outputRowcount = rep.getStepAttributeBoolean( id_step, "outputRowcount" );
rowcountField = rep.getStepAttributeString( id_step, "rowcountField" );
} 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, "outputRowcount", outputRowcount );
rep.saveStepAttribute( id_transformation, id_step, "rowcountField", rowcountField );
} catch ( Exception e ) {
throw new KettleException( "Unable to save step information to the repository for id_step=" + id_step, e );
}
}
@Override
public StepInterface getStep( StepMeta stepMeta, StepDataInterface stepDataInterface, int cnr, TransMeta tr,
Trans trans ) {
return new StepMetastructure( stepMeta, stepDataInterface, cnr, tr, trans );View on GitHub (pinned to f3058517a1)