pentaho/pentaho-kettle · error · KettleException
GPLoadMeta.Exception.UnableToSaveStepInfoToRepository
Error message
GPLoadMeta.Exception.UnableToSaveStepInfoToRepository
What it means
GPLoadMeta.saveRep() persists step settings to the repository; any exception (including insertStepDatabase for the linked database connection) is wrapped in a KettleException with this message plus id_step. The step's configuration was not saved.
Solutions
- Verify repository connection and retry saving the transformation
- Ensure the referenced database connection exists and is saved (it has an ObjectId) before saving the step
- Check the repository user has write permissions on the transformation's folders
- Inspect e.getCause() for the underlying SQL error and fix accordingly (constraints, schema)
Example fix
// before // databaseMeta referenced by GPload step not saved -> insertStepDatabase(null objectId) // after // Save the database connection first (DatabaseMeta dialog -> Save), then save the transformation
Defensive patterns
Strategy: try-catch
Validate before calling
// before saveRep: ensure referenced DB connection is persisted
if (databaseMeta != null && (databaseMeta.getObjectId() == null)) {
rep.save(databaseMeta, null, null); // persist connection first
} Try / catch
try { saveTransformationToRepo(...) } catch (KettleException e) {
if (e.getMessage().contains("UnableToSaveStepInfoToRepository")) {
logError("Save failed for step " + id_step + ": " + e.getCause());
/* retry after reconnecting the repository */
}
throw e;
} Prevention
- Save referenced database connections before saving steps that use them
- Use a repository account with write access; avoid read-only credentials for authoring
- Handle transient DB outages with a retry on save
- Check e.getCause() to distinguish SQL errors from metadata problems
When it happens
Trigger: Repository writes during saveRep fail — repository connection dropped, constraint violations, missing id_step, databaseMeta.objectId null when inserting the step-database link, or read-only repository user.
Common situations: Network blip to the repository DB mid-save; saving a transformation whose step references a database connection that was never saved (null ObjectId); repository in read-only mode; version/lock conflicts.
Related errors
- OraBulkLoaderMeta.Exception.UnableToSaveStepInfoToRepository
- Unable to save step information to the repository for…
- Unable to save step information to the repository for…
- AddSequenceMeta.Exception.UnableToSaveStepInfo
- AggregateRowsMeta.Exception.UnableToSaveStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/edbbb0410b1aae26.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/gpload/core/src/main/java/org/pentaho/di/trans/steps/gpload/GPLoadMeta.java:537
for ( int i = 0; i < localHosts.length; i++ ) {
rep.saveStepAttribute( id_transformation, id_step, i, "local_host", localHosts[i] );
}
for ( int i = 0; i < fieldTable.length; i++ ) {
rep.saveStepAttribute( id_transformation, id_step, i, "stream_name", fieldTable[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "field_name", fieldStream[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "date_mask", dateMask[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "match_column", matchColumn[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "update_column", updateColumn[i] );
}
// Also, save the step-database relationship!
if ( databaseMeta != null ) {
rep.insertStepDatabase( id_transformation, id_step, databaseMeta.getObjectId() );
}
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString( PKG, "GPLoadMeta.Exception.UnableToSaveStepInfoToRepository" )
+ id_step, e );
}
}
@Override
public void getFields( Bowl bowl, RowMetaInterface rowMeta, String origin, RowMetaInterface[] info, StepMeta nextStep,
VariableSpace space, Repository repository, IMetaStore metaStore ) throws KettleStepException {
// Default: nothing changes to rowMeta
}
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;
String error_message = "";
if ( databaseMeta != null ) {
Database db = new Database( loggingObject, databaseMeta );View on GitHub (pinned to f3058517a1)