pentaho/pentaho-kettle · error · KettleException
PentahoReportingOutputMeta.Exception.UnableToSaveStepInfo
Error message
PentahoReportingOutputMeta.Exception.UnableToSaveStepInfo
What it means
PentahoReportingOutputMeta.saveRep wraps any Exception from repository save calls into a KettleException with message PentahoReportingOutputMeta.Exception.UnableToSaveStepInfo plus the step ObjectId. It means the step's settings (fields, parameters, processor type) could not be persisted to the repository.
Solutions
- Check the chained cause: typically a SQL/permission error from the repository
- Verify the repository user has write permissions on the transformation/step tables
- Test repository connectivity (database up, network reachable) and retry the save
- If running against a file repository, check filesystem permissions and disk space
Defensive patterns
Strategy: try-catch
Validate before calling
// check write access before saveRep
if ( !rep.getSessionClient().hasPermission( idTransformation, PermissionType.MODIFY_CONTENT ) ) {
throw new KettleException( "No write permission on repository" );
} Try / catch
try {
meta.saveRep( rep, metaStore, idTransformation, idStep );
} catch ( KettleException e ) {
logError( "Unable to save step info for " + idStep + ": " + e.getMessage(), e );
// retry after reconnecting the repository
} Prevention
- Use a repository account with write permissions
- Monitor repository DB connectivity and disk space
- Retry saves on transient connection failures
- Avoid concurrent edits of the same transformation
When it happens
Trigger: saveRep -> rep.saveStepAttribute(...) throws, then KettleException is thrown with the message concatenated with idStep.
Common situations: Repository database connection lost mid-save; read-only repository user/insufficient permissions on r_step_attribute; repository storage full or table locked.
Related errors
- AddSequenceMeta.Exception.UnableToSaveStepInfo
- ColumnExistsMeta.Exception.UnableToSaveStepInfo
- ColumnExistsMeta.Exception.UnexpectedErrorReadingStepInfo
- CreditCardValidatorMeta.Exception.UnableToSaveStepInfo
- CubeInputMeta.Exception.UnableToSaveStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/69a71ee261b7759f.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/pentaho-reporting/impl/src/main/java/org/pentaho/di/trans/steps/pentahoreporting/PentahoReportingOutputMeta.java:273
rep.saveStepAttribute( idTransformation, idStep, XML_TAG_INPUT_FILE_FIELD, inputFileField );
rep.saveStepAttribute( idTransformation, idStep, XML_TAG_OUTPUT_FILE_FIELD, outputFileField );
rep.saveStepAttribute( idTransformation, idStep, XML_TAG_INPUT_FILE, inputFile );
rep.saveStepAttribute( idTransformation, idStep, XML_TAG_OUTPUT_FILE, outputFile );
rep.saveStepAttribute( idTransformation, idStep, XML_TAG_USE_VALUES_FROM_FIELDS, useValuesFromFields );
rep.saveStepAttribute( idTransformation, idStep, XML_TAG_CREATE_PARENT_FOLDER, createParentFolder );
List<String> pars = new ArrayList<String>( parameterFieldMap.keySet() );
Collections.sort( pars );
for ( int i = 0; i < pars.size(); i++ ) {
String parameter = pars.get( i );
String fieldname = parameterFieldMap.get( parameter );
rep.saveStepAttribute( idTransformation, idStep, i, XML_TAG_PARAMETER + "_" + XML_TAG_NAME, parameter );
rep.saveStepAttribute( idTransformation, idStep, i, XML_TAG_PARAMETER + "_" + XML_TAG_FIELD, fieldname );
}
rep.saveStepAttribute( idTransformation, idStep, XML_TAG_PROCESSOR_TYPE, outputProcessorType.getCode() );
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString(
PKG, "PentahoReportingOutputMeta.Exception.UnableToSaveStepInfo" )
+ idStep, 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;
// Check output fields
if ( prev != null && prev.size() > 0 ) {
cr =
new CheckResult(
CheckResult.TYPE_RESULT_OK, BaseMessages.getString(
PKG, "PentahoReportingOutputMeta.CheckResult.ReceivingFields", String.valueOf( prev.size() ) ),
stepMeta );
remarks.add( cr );View on GitHub (pinned to f3058517a1)