pentaho/pentaho-kettle · error · KettleException
LucidDBStreamingLoaderMeta.Exception.UnableToSaveStepInfoToRepository
LucidDBStreamingLoaderMeta.Exception.UnableToSaveStepInfoToRepository
Error message
LucidDBStreamingLoaderMeta.Exception.UnableToSaveStepInfoToRepository
What it means
saveRep() persists the step's settings to the repository. Any failure while writing step attributes or inserting the step-database relationship (rep.insertStepDatabase) is wrapped in a KettleException with this message plus the step id.
Solutions
- Save the database connection (databaseMeta) to the repository first so it has a valid ObjectId before saving the step.
- Check repository DB connectivity and that the user has write permissions.
- Look at the nested cause exception for the underlying SQL error (constraint, disk full, read-only).
- Run repository upgrade/repair scripts if the schema is out of date.
Example fix
// before: step references an unsaved connection
transMeta.addDatabase(metaOfUnsavedDb);
// after: ensure the connection is defined/persisted before saving
if (meta.getDatabaseMeta() != null && meta.getDatabaseMeta().getObjectId() == null) {
repository.save(meta.getDatabaseMeta(), null, null);
} Defensive patterns
Strategy: try-catch
Validate before calling
if (meta.getDatabaseMeta() != null && meta.getDatabaseMeta().getObjectId() == null) {
repository.save(meta.getDatabaseMeta(), null, null); // persist connection first
} Try / catch
try {
repository.save(transMeta, versionComment, null);
} catch (KettleException e) {
logError("Save to repository failed for step " + id_step, e.getCause());
throw e;
} Prevention
- Always save referenced database connections to the repository before saving steps that use them.
- Ensure the repository user has write privileges.
- Monitor repository DB disk space and read-only states.
- Run repository upgrade scripts after Pentaho version changes.
When it happens
Trigger: Saving a transformation to a repository: saveRep(rep, metaStore, id_transformation, id_step) throws when inserting r_step_attribute values or the step-database link fails — e.g. repository DB read-only, constraint violation, or the referenced databaseMeta has no ObjectId (database not yet saved).
Common situations: Repository DB is read-only or disk full; the shared database connection used by the step has never been saved to the repository so its ObjectId is null; repository schema version mismatch.
Related errors
- ERROR_0002
- HTTPMeta.Exception.UnableToSaveStepInfo
- JobEntryEval.UnableToSaveToRepo
- JobEntryEvalTableContent.UnableSaveRep
- JobEntrySimple.Error.Exception.UnableSaveRep
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/8f29e86ef96c5988.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/lucid-db-streaming-loader/core/src/main/java/org/pentaho/di/trans/steps/luciddbstreamingloader/LucidDBStreamingLoaderMeta.java:376
}
for ( int i = 0; i < fieldTableForFields.length; i++ ) {
rep.saveStepAttribute( id_transformation, id_step, i, "field_field_name", fieldTableForFields[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "field_stream_name", fieldStreamForFields[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "insert_or_update_flag", insOrUptFlag[i] );
}
for ( int i = 0; i < tabIsEnable.length; i++ ) {
rep.saveStepAttribute( id_transformation, id_step, i, "tab_is_enable", tabIsEnable[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, "LucidDBStreamingLoaderMeta.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
}
// TODO: In future, we need to implement it to do double-check.
public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepMeta,
RowMetaInterface prev, String[] input, String[] output, RowMetaInterface info, VariableSpace space,
Repository repository, IMetaStore metaStore ) {
}
View on GitHub (pinned to f3058517a1)