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=
What it means
MondrianInputMeta.saveRep persists the step configuration (connection link, sql, catalog, role, variables_active) to the repository. Any exception during the save is wrapped in a KettleException that includes the failing id_step. It means the step's settings could not be written, so the transformation is not fully persisted.
Solutions
- Check repository connectivity and that the account has write permissions
- Verify the referenced databaseMeta connection still exists in the repository (valid object id)
- Retry the save after resolving the root cause shown in the wrapped exception
- Repair/upgrade the repository schema if tables are missing columns for newer attributes
Defensive patterns
Strategy: try-catch
Validate before calling
// Pre-check write access and connection existence before saving
if (databaseMeta != null && rep.searchDatabaseMeta(databaseMeta.getName()) == null) {
throw new IllegalStateException("Connection '" + databaseMeta.getName() + "' not in repository; save it first");
} Type guard
null
Try / catch
try {
transMeta.saveRep(rep, metaStore, directoryId, transName);
} catch (KettleException e) {
if (e.getMessage().startsWith("Unable to save step information to the repository")) {
logError("Step save failed (transformation NOT persisted): " + e.getMessage(), e);
}
} Prevention
- Check repository disk space and write status before bulk edits
- Save referenced database connections to the repository before referencing them
- Avoid concurrent edits to the same transformation
- Verify repository schema version matches the PDI release
When it happens
Trigger: saveRep is called when saving a transformation and the repository rejects a write (connection lost, insertStepDatabase constraint violation on the connection id, read-only repository).
Common situations: Repository database read-only or out of space; broken databaseMeta reference with an invalid object id; concurrent save conflicts; repository schema mismatch after upgrade.
Related errors
- AbortMeta.Exception.UnableToSaveStepInfoToRepository
- AccessInputMeta.Exception.ErrorSavingToRepository
- CloneRowMeta.Exception.UnexpectedErrorReadingStepInfo
- ColumnExistsMeta.Exception.UnableToSaveStepInfo
- ColumnExistsMeta.Exception.UnexpectedErrorReadingStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/30beb5792ca6be08.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/mondrianinput/impl/src/main/java/org/pentaho/di/trans/steps/mondrianinput/MondrianInputMeta.java:225
} catch ( Exception e ) {
throw new KettleException( "Unexpected error reading step information from the repository", e );
}
}
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
try {
rep.saveDatabaseMetaStepAttribute( id_transformation, id_step, "id_connection", databaseMeta );
rep.saveStepAttribute( id_transformation, id_step, "sql", sql );
rep.saveStepAttribute( id_transformation, id_step, "catalog", catalog );
rep.saveStepAttribute( id_transformation, id_step, "role", role );
rep.saveStepAttribute( id_transformation, id_step, "variables_active", variableReplacementActive );
// Also, save the step-database relationship!
if ( databaseMeta != null ) {
rep.insertStepDatabase( id_transformation, id_step, databaseMeta.getObjectId() );
}
} catch ( Exception e ) {
throw new KettleException( "Unable to save step information to the repository for id_step=" + id_step, e );
}
}
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;
if ( databaseMeta != null ) {
cr = new CheckResult( CheckResultInterface.TYPE_RESULT_OK, "Connection exists", stepMeta );
remarks.add( cr );
// TODO: perform lookup to see if it all works fine.
} else {
cr =
new CheckResult(
CheckResultInterface.TYPE_RESULT_ERROR, "Please select or create a connection to use", stepMeta );
remarks.add( cr );View on GitHub (pinned to f3058517a1)