pentaho/pentaho-kettle · error · KettleException
ZipFileMeta.Exception.UnableToSaveStepInfo
Error message
ZipFileMeta.Exception.UnableToSaveStepInfo
What it means
ZipFileMeta.saveRep wraps any Exception thrown while persisting the step's settings into the repository into this KettleException, with the id_step appended to the message. It means the transformation could not be saved to the repository because this step's attributes failed to write.
Solutions
- Check the chained cause 'e' for the underlying JDBC/DB error.
- Verify the repository connection is alive and retry the save (Ctrl+S).
- Confirm the repository user has INSERT/UPDATE permissions on the step attribute tables.
- Check DB disk space and that the repository isn't in read-only mode.
- As a fallback, export the transformation to XML and work locally.
Example fix
// before: saving with a read-only repository user rep = KettleDatabaseRepository.connect(..."readonly_user"...); rep.save(transMeta, "myTrans", null, true); // after: use a user with write privileges rep = KettleDatabaseRepository.connect(..."admin"...); rep.save(transMeta, "myTrans", null, true);
Defensive patterns
Strategy: retry
Validate before calling
if (!rep.isConnected()) throw new IllegalStateException("Repository not connected");
// verify write access before saving
rep.getDatabaseMeta().testConnectionSuccess(); Try / catch
try {
rep.save(transMeta, "myTrans", null, true);
} catch (KettleException e) {
if (e.getMessage().contains("UnableToSaveStepInfo")) {
rep.disconnect(); rep.connect(user, pass);
rep.save(transMeta, "myTrans", null, true); // retry once
} else { throw e; }
} Prevention
- Save with a repository user that has INSERT/UPDATE privileges.
- Monitor repository DB disk space and availability before batch saves.
- Export transformations to XML as a backup before repository maintenance windows.
When it happens
Trigger: saveRep throws when rep.saveStepAttribute fails — repository DB connection lost, table locked/read-only, insufficient permissions on r_step_attribute, or transaction rollback during save.
Common situations: Repository database down or network blip while saving; user lacking write permissions on repository tables; read-only replica used as repository; DB disk full causing write failure.
Related errors
- PropertyInputMeta.Exception.ErrorSavingToRepository
- ElasticSearchBulkMeta.Exception.ErrorReadingRepository
- ElasticSearchBulkMeta.Exception.ErrorSavingToRepository
- ERROR_0002
- GetTableNamesMeta.Exception.UnableToSaveStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/080487a39b5e61dd.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/zipfile/ZipFileMeta.java:274
throw new KettleException( BaseMessages.getString(
PKG, "ZipFileMeta.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, "sourcefilenamefield", sourcefilenamefield );
rep.saveStepAttribute( id_transformation, id_step, "targetfilenamefield", targetfilenamefield );
rep.saveStepAttribute( id_transformation, id_step, "baseFolderField", baseFolderField );
rep.saveStepAttribute( id_transformation, id_step, "operation_type", getOperationTypeCode( operationType ) );
rep.saveStepAttribute( id_transformation, id_step, "addresultfilenames", addresultfilenames );
rep.saveStepAttribute( id_transformation, id_step, "overwritezipentry", overwritezipentry );
rep.saveStepAttribute( id_transformation, id_step, "createparentfolder", createparentfolder );
rep.saveStepAttribute( id_transformation, id_step, "keepsourcefolder", keepsourcefolder );
rep.saveStepAttribute( id_transformation, id_step, "movetofolderfield", movetofolderfield );
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString( PKG, "ZipFileMeta.Exception.UnableToSaveStepInfo" )
+ 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 ) {
CheckResult cr;
String error_message = "";
// source filename
if ( Utils.isEmpty( sourcefilenamefield ) ) {
error_message = BaseMessages.getString( PKG, "ZipFileMeta.CheckResult.SourceFileFieldMissing" );
cr = new CheckResult( CheckResult.TYPE_RESULT_ERROR, error_message, stepMeta );
remarks.add( cr );
} else {
error_message = BaseMessages.getString( PKG, "ZipFileMeta.CheckResult.TargetFileFieldOK" );
cr = new CheckResult( CheckResult.TYPE_RESULT_OK, error_message, stepMeta );View on GitHub (pinned to f3058517a1)