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
AccessOutputMeta.saveRep persists the step settings (filename, tablename, create_table, commit_size, add_to_result_filenames, do_not_open_newfile_init). Any exception in the saveStepAttribute calls is wrapped in KettleException("Unable to save step information to the repository for id_step="). It means the repository write for this step failed.
Solutions
- Verify the repository connection and reconnect if needed
- Confirm the repository user has INSERT/UPDATE rights
- Retry the save after fixing connectivity
- Inspect the wrapped cause for the actual JDBC error
- Check repository DB logs/disk space for storage failures
Example fix
null
Defensive patterns
Strategy: try-catch
Validate before calling
if (!repo.isConnected()) throw new IllegalStateException("Repository not connected before save");
// and confirm writable: run a small test saveStepAttribute or check user grants Try / catch
try {
transMeta.save(rep, comment, null);
} catch (KettleException e) {
log.error("saveRep failed for id_step=" + e.getMessage(), e.getCause());
repo.disconnect(); repo.connect(user, pass);
transMeta.save(rep, comment, null); // retry once
} Prevention
- Verify repository write grants for all designers
- Watch DB disk space and connection limits
- Use read-only repos only for reading, never save
- Retry with backoff on transient connectivity errors
When it happens
Trigger: Saving a transformation when the repository connection is broken, the user lacks write permission, the repository is read-only, or a JDBC constraint/IO error occurs on r_step_attribute writes.
Common situations: Repository database restarted between opening and saving; insufficient DB grants; read-only standby repository; storage quota exceeded on the repository DB.
Related errors
- AccessInputMeta.Exception.ErrorSavingToRepository
- Unexpected error reading step information from the…
- 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/f45d4b4b3b9fe489.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/ms-access/impl/src/main/java/org/pentaho/di/trans/steps/accessoutput/AccessOutputMeta.java:212
} 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.saveStepAttribute( id_transformation, id_step, "filename", filename );
rep.saveStepAttribute( id_transformation, id_step, "table", tablename );
rep.saveStepAttribute( id_transformation, id_step, "truncate", tableTruncated );
rep.saveStepAttribute( id_transformation, id_step, "create_file", fileCreated );
rep.saveStepAttribute( id_transformation, id_step, "create_table", tableCreated );
rep.saveStepAttribute( id_transformation, id_step, "commit_size", commitSize );
rep.saveStepAttribute( id_transformation, id_step, "add_to_result_filenames", addToResultFilenames );
rep.saveStepAttribute( id_transformation, id_step, "do_not_open_newfile_init", doNotOpeNnewFileInit );
} 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 ) {
// TODO: add file checking in case we don't create a table.
// See if we have input streams leading to this step!
if ( input.length > 0 ) {
CheckResult cr =
new CheckResult( CheckResult.TYPE_RESULT_OK, BaseMessages.getString(
PKG, "AccessOutputMeta.CheckResult.ExpectedInputOk" ), stepMeta );
remarks.add( cr );
} else {
CheckResult cr =
new CheckResult( CheckResult.TYPE_RESULT_ERROR, BaseMessages.getString(View on GitHub (pinned to f3058517a1)