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
PropertyOutputMeta.readRep wraps any exception raised while loading this step's configuration attributes from the Kettle repository into a generic KettleException. It signals that the step metadata could not be deserialized from the repository (e.g. r_step_attribute rows are missing, corrupt, or the repository connection broke mid-read). The original cause is chained as the second argument.
Solutions
- Check the chained cause (e.getCause()) to find the real repository failure
- Reconnect to the repository and retry loading the transformation
- Verify the repository schema matches the Pentaho/Kettle client version (run repository upgrade scripts if needed)
- If a specific attribute is missing, re-save the step in Spoon to repopulate r_step_attribute
Example fix
// before
PropertyOutputMeta meta = (PropertyOutputMeta) stepMeta.getStepMetaInterface();
meta.readRep(repository, metastore, stepId, databases);
// after
try {
PropertyOutputMeta meta = (PropertyOutputMeta) stepMeta.getStepMetaInterface();
meta.readRep(repository, metastore, stepId, databases);
} catch (KettleException e) {
logError("Repository read failed: " + (e.getCause() != null ? e.getCause().getMessage() : e.getMessage()));
repository.disconnect();
repository.connect(user, pass); // then retry
} Defensive patterns
Strategy: try-catch
Validate before calling
if (stepId == null || repository == null || !repository.isConnected()) throw new KettleException("Repository not ready for readRep"); Try / catch
try { meta.readRep(rep, metaStore, idStep, databases); } catch (KettleException e) { Throwable root = e.getCause(); logError("Repository read failed: " + (root != null ? root.getMessage() : e.getMessage())); throw e; } Prevention
- Always read the chained cause — the wrapper message is generic
- Keep repository schema and Pentaho client versions in sync
- Use connection pooling with keepalive for DB repositories
- Re-save steps after upgrading Pentaho versions
When it happens
Trigger: Calling TransMeta/StepMeta load code that invokes readRep() when the underlying Repository.getStepAttributeBoolean/getStepAttributeString calls throw — e.g. repository connection dropped, schema/version mismatch, or a null id_step for a partially persisted transformation.
Common situations: Opening a transformation stored in a database repository with stale JDBC connections; repository schema upgraded to a newer Pentaho version than the client; corrupted r_step_attribute rows; load balancer killing idle DB sessions.
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
- Unable to save step information to the repository for…
- Unable to save step information to the repository for…
- AnalyticQueryMeta.Exception.UnexpectedErrorInReadingStepInfo…
- AnalyticQueryMeta.Exception.UnableToSaveStepInfoToRepository
- DatabaseJoinMeta.Exception.UnableToSaveStepInfo + id_step
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/e87ff155f3314b35.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/propertyoutput/PropertyOutputMeta.java:429
keyfield = rep.getStepAttributeString( id_step, "keyfield" );
valuefield = rep.getStepAttributeString( id_step, "valuefield" );
comment = rep.getStepAttributeString( id_step, "comment" );
fileName = rep.getStepAttributeString( id_step, "file_name" );
extension = rep.getStepAttributeString( id_step, "file_extention" );
stepNrInFilename = rep.getStepAttributeBoolean( id_step, "file_add_stepnr" );
partNrInFilename = rep.getStepAttributeBoolean( id_step, "file_add_partnr" );
dateInFilename = rep.getStepAttributeBoolean( id_step, "file_add_date" );
timeInFilename = rep.getStepAttributeBoolean( id_step, "file_add_time" );
createparentfolder = rep.getStepAttributeBoolean( id_step, "create_parent_folder" );
addToResult = rep.getStepAttributeBoolean( id_step, "addtoresult" );
append = rep.getStepAttributeBoolean( id_step, "append" );
fileNameInField = rep.getStepAttributeBoolean( id_step, "fileNameInField" );
fileNameField = rep.getStepAttributeString( id_step, "fileNameField" );
} 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, "keyfield", keyfield );
rep.saveStepAttribute( id_transformation, id_step, "valuefield", valuefield );
rep.saveStepAttribute( id_transformation, id_step, "comment", comment );
rep.saveStepAttribute( id_transformation, id_step, "file_name", fileName );
rep.saveStepAttribute( id_transformation, id_step, "file_extention", extension );
rep.saveStepAttribute( id_transformation, id_step, "file_add_stepnr", stepNrInFilename );
rep.saveStepAttribute( id_transformation, id_step, "file_add_partnr", partNrInFilename );
rep.saveStepAttribute( id_transformation, id_step, "file_add_date", dateInFilename );
rep.saveStepAttribute( id_transformation, id_step, "file_add_time", timeInFilename );
View on GitHub (pinned to f3058517a1)