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=" + id_step
What it means
SortRowsMeta.saveRep() persists each sort field's attributes (name, ascending, case sensitivity, collator enabled/strength, presorted) to the repository. A failure in any saveStepAttribute call is wrapped in a KettleException 'Unable to save step information to the repository for id_step=...'.
Solutions
- Check the repository user has write (INSERT/UPDATE) privileges on the step attribute tables.
- Verify repository connectivity during save; retry after network issues.
- Check DB error/log for constraint or space errors and fix the underlying DB problem.
- Test saving a trivial transformation to isolate whether it is step-specific or repository-wide.
- If a lock/transaction conflict, ask other users to release and retry the save.
Example fix
-- before GRANT SELECT ON r_step_attribute TO kettle_user; -- after GRANT SELECT, INSERT, UPDATE, DELETE ON r_step_attribute TO kettle_user;
Defensive patterns
Strategy: try-catch
Try / catch
try { repo.save(transMeta, path, metaStore); } catch (KettleException e) {
if (e.getMessage().contains("Unable to save step information")) {
logError("Repository write failed: " + e.getCause());
// check permissions/connection then retry
}
} Prevention
- Grant the repository user full DML on Kettle repository tables.
- Check repository disk/quota before large saves.
- Avoid concurrent saves of the same transformation.
- Verify connectivity before long editing sessions.
When it happens
Trigger: Saving a transformation whose Sort rows step attributes cannot be written: repository connection dropped, read-only repository user, DB constraint violations, or transaction errors.
Common situations: Read-only or insufficient DB permissions for the Kettle repository user; repository storage full; network interruption mid-save; repository lock contention.
Related errors
- AbsSecurityProvider.ERROR_0002_UNABLE_TO_ACCESS_IS_ALLOWED
- ERROR_0003_Cannot_Save_Job_Entry
- Error saving job
- GetSequenceMeta.Exception.UnableToSaveStepInfo
- GroupByMeta.Exception.UnableToSaveStepInfoToRepository
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/70f5a1cefa9c7973.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/sort/SortRowsMeta.java:380
try {
rep.saveStepAttribute( id_transformation, id_step, "directory", directory );
rep.saveStepAttribute( id_transformation, id_step, "prefix", prefix );
rep.saveStepAttribute( id_transformation, id_step, "sort_size", sortSize );
rep.saveStepAttribute( id_transformation, id_step, "free_memory", freeMemoryLimit );
rep.saveStepAttribute( id_transformation, id_step, "compress", compressFiles );
rep.saveStepAttribute( id_transformation, id_step, "compress_variable", compressFilesVariable );
rep.saveStepAttribute( id_transformation, id_step, "unique_rows", onlyPassingUniqueRows );
for ( int i = 0; i < fieldName.length; i++ ) {
rep.saveStepAttribute( id_transformation, id_step, i, "field_name", fieldName[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "field_ascending", ascending[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "field_case_sensitive", caseSensitive[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "field_collator_enabled", collatorEnabled[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "field_collator_strength", collatorStrength[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "field_presorted", preSortedField[i] );
}
} catch ( Exception e ) {
throw new KettleException( "Unable to save step information to the repository for id_step=" + id_step, e );
}
}
@Override
public void getFields( Bowl bowl, RowMetaInterface inputRowMeta, String name, RowMetaInterface[] info,
StepMeta nextStep, VariableSpace space, Repository repository, IMetaStore metaStore ) throws KettleStepException {
// Set the sorted properties: ascending/descending
assignSortingCriteria( inputRowMeta );
}
@SuppressWarnings( "WeakerAccess" )
public void assignSortingCriteria( RowMetaInterface inputRowMeta ) {
for ( int i = 0; i < fieldName.length; i++ ) {
int idx = inputRowMeta.indexOfValue( fieldName[i] );
if ( idx >= 0 ) {
ValueMetaInterface valueMeta = inputRowMeta.getValueMeta( idx );
// On all these valueMetas, check to see if the value actually exists before we try to
// set them.View on GitHub (pinned to f3058517a1)