pentaho/pentaho-kettle · error · KettleException
Unable to save step information to the repository
Error message
Unable to save step information to the repository
What it means
UniqueRowsByHashSetMeta.saveRep writes the step's settings (reject_duplicate_row, error_description and each compare field_name) to the repository. A KettleException from the repository is rethrown wrapped with this message, meaning the step configuration could not be persisted.
Solutions
- Inspect the cause exception and repository logs for the DB error
- Confirm the repository user can write to the step attribute tables
- Retry after restoring the repository connection
- Save the transformation to file as a workaround
Defensive patterns
Strategy: try-catch
Validate before calling
// Java: confirm write access before saving step attributes
if ( !repository.isConnected() ) {
throw new IllegalStateException( "Repository not connected before saveRep" );
} Try / catch
try {
meta.saveRep( repository, metaStore, idTransformation, idStep );
} catch ( KettleException e ) {
logError( "Repository save of UniqueRowsByHashSet step failed: " + e.getCause(), e );
// reconnect and retry, or save to file
} Prevention
- Ensure repository write permissions
- Monitor repository DB availability
- Maintain XML backups of transformations
When it happens
Trigger: saveRep (public) fails while saving attributes — repository write error, lost connection, or constraint violation while iterating compareFields.
Common situations: Repository database read-only or down; insufficient repository user permissions; large field lists hitting database limits.
Related errors
- Unexpected error reading step information from the…
- AddSequenceMeta.Exception.UnableToSaveStepInfo
- ColumnExistsMeta.Exception.UnableToSaveStepInfo
- ColumnExistsMeta.Exception.UnexpectedErrorReadingStepInfo
- CreditCardValidatorMeta.Exception.UnableToSaveStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/92ce13b8128c490c.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/uniquerowsbyhashset/UniqueRowsByHashSetMeta.java:214
for ( int i = 0; i < nrfields; i++ ) {
compareFields[i] = rep.getStepAttributeString( id_step, i, "field_name" );
}
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString(
PKG, "UniqueRowsByHashSetMeta.Exception.UnexpectedErrorReadingStepInfo" ), e );
}
}
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
try {
rep.saveStepAttribute( id_transformation, id_step, "store_values", storeValues );
rep.saveStepAttribute( id_transformation, id_step, "reject_duplicate_row", rejectDuplicateRow );
rep.saveStepAttribute( id_transformation, id_step, "error_description", errorDescription );
for ( int i = 0; i < compareFields.length; i++ ) {
rep.saveStepAttribute( id_transformation, id_step, i, "field_name", compareFields[i] );
}
} catch ( KettleException e ) {
throw new KettleException( BaseMessages.getString(
PKG, "UniqueRowsByHashSetMeta.Exception.UnableToSaveStepInfo" ), 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 ( input.length > 0 ) {
cr =
new CheckResult( CheckResultInterface.TYPE_RESULT_OK, BaseMessages.getString(
PKG, "UniqueRowsByHashSetMeta.CheckResult.StepReceivingInfoFromOtherSteps" ), stepMeta );
remarks.add( cr );
} else {
cr =
new CheckResult( CheckResultInterface.TYPE_RESULT_ERROR, BaseMessages.getString(
PKG, "UniqueRowsByHashSetMeta.CheckResult.NoInputReceivedFromOtherSteps" ), stepMeta );View on GitHub (pinned to f3058517a1)