pentaho/pentaho-kettle · error · KettleException
SymmetricCryptoTransMeta.Exception.UnableToSaveStepInfo
SymmetricCryptoTransMeta.Exception.UnableToSaveStepInfo
Error message
SymmetricCryptoTransMeta.Exception.UnableToSaveStepInfo + id_step
What it means
SymmetricCryptoTransMeta.saveRep() persists step settings via rep.saveStepAttribute(...) (secretKey encrypted, secretKeyInField, readKeyAsBinary, outputResultAsBinary). If any repository save call throws, it is wrapped in a KettleException with this message plus the id_step, indicating the step configuration could not be saved. The original cause is chained.
Solutions
- Check repository DB connectivity, permissions, and free space, then re-save the transformation.
- Run as a user with write privileges on the repository tables.
- Verify the secret key length fits the repository attribute column; shorten or use a variable reference instead.
- Save to file (.ktr) as a fallback while repository issues are resolved.
Example fix
// before
rep.save(transMeta, "MyTrans", null, true); // fails on read-only DB
// after
try {
rep.save(transMeta, "MyTrans", null, true);
} catch (KettleException e) {
transMeta.setFilename("/tmp/MyTrans.ktr"); // file fallback
transMeta.exportResources();
} Defensive patterns
Strategy: try-catch
Validate before calling
// Pre-check write access before saveRep runs
if (!rep.testConnection() || rep.isReadOnly()) {
throw new IllegalStateException("Repository not writable");
} Try / catch
try {
rep.save(transMeta, "MyTrans", null, true);
} catch (KettleException e) {
logError("Failed saving step info for id_step: " + e.getCause(), e);
// fallback: save to file
transMeta.setFilename("/tmp/MyTrans.ktr");
} Prevention
- Ensure the DB user has INSERT/UPDATE rights on repository tables.
- Monitor repository DB disk space and read-only states.
- Keep long secret keys in variables rather than attribute columns.
When it happens
Trigger: Saving a transformation to a repository when the connection is down, the database is read-only or out of space, a transaction fails, or attribute values exceed column limits.
Common situations: Repository database read-only mode or quota exceeded; network drop during save; long secret key overflowing the attribute column; concurrent save conflicts; permission revoked mid-session.
Related errors
- ColumnExistsMeta.Exception.UnableToSaveStepInfo
- ColumnExistsMeta.Exception.UnexpectedErrorReadingStepInfo
- CreditCardValidatorMeta.Exception.UnableToSaveStepInfo
- CubeInputMeta.Exception.UnexpectedErrorWhileReadingStepInfo
- SETVARIABLE0006
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/431b49f717a8ab5c.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/symmetriccrypto/symmetriccryptotrans/SymmetricCryptoTransMeta.java:372
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
try {
rep.saveStepAttribute( id_transformation, id_step, "operation_type", getOperationTypeCode( operationType ) );
rep.saveStepAttribute( id_transformation, id_step, "algorithm", algorithm );
rep.saveStepAttribute( id_transformation, id_step, "schema", schema );
rep.saveStepAttribute( id_transformation, id_step, "secretKeyField", secretKeyField );
rep.saveStepAttribute( id_transformation, id_step, "messageField", messageField );
rep.saveStepAttribute( id_transformation, id_step, "resultfieldname", resultfieldname );
rep.saveStepAttribute( id_transformation, id_step, "secretKey", Encr
.encryptPasswordIfNotUsingVariables( secretKey ) );
rep.saveStepAttribute( id_transformation, id_step, "secretKeyInField", secretKeyInField );
rep.saveStepAttribute( id_transformation, id_step, "readKeyAsBinary", readKeyAsBinary );
rep.saveStepAttribute( id_transformation, id_step, "outputResultAsBinary", outputResultAsBinary );
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString(
PKG, "SymmetricCryptoTransMeta.Exception.UnableToSaveStepInfo" )
+ id_step, e );
}
}
public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepinfo,
RowMetaInterface prev, String[] input, String[] output, RowMetaInterface info, VariableSpace space,
Repository repository, IMetaStore metaStore ) {
CheckResult cr;
if ( prev != null && prev.size() > 0 ) {
cr =
new CheckResult(
CheckResult.TYPE_RESULT_OK, BaseMessages.getString(
PKG, "SymmetricCryptoTransMeta.CheckResult.ConnectedStepOK", String.valueOf( prev.size() ) ),
stepinfo );
} else {View on GitHub (pinned to f3058517a1)