{"record":{"id":"7fdd786ccdba1e06","repo":"pentaho/pentaho-kettle","slug":"pgpdecryptstreammeta-exception-unabletosavestepinfo","errorCode":null,"errorMessage":"PGPDecryptStreamMeta.Exception.UnableToSaveStepInfo","messagePattern":"PGPDecryptStreamMeta\\.Exception\\.UnableToSaveStepInfo","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/pgpdecryptstream/PGPDecryptStreamMeta.java","lineNumber":265,"sourceCode":"      passphraseFieldName = rep.getStepAttributeString( id_step, \"passphraseFieldName\" );\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"PGPDecryptStreamMeta.Exception.UnexpectedErrorReadingStepInfo\" ), e );\n    }\n  }\n\n  @Override\n  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {\n    try {\n      rep.saveStepAttribute( id_transformation, id_step, \"gpglocation\", gpglocation );\n      rep.saveStepAttribute( id_transformation, id_step, \"passhrase\", Encr\n        .encryptPasswordIfNotUsingVariables( passhrase ) );\n      rep.saveStepAttribute( id_transformation, id_step, \"streamfield\", streamfield );\n      rep.saveStepAttribute( id_transformation, id_step, \"resultfieldname\", resultfieldname );\n      rep.saveStepAttribute( id_transformation, id_step, \"passphraseFromField\", passphraseFromField );\n      rep.saveStepAttribute( id_transformation, id_step, \"passphraseFieldName\", passphraseFieldName );\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"PGPDecryptStreamMeta.Exception.UnableToSaveStepInfo\" )\n        + id_step, e );\n    }\n  }\n\n  @Override\n  public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepMeta,\n    RowMetaInterface prev, String[] input, String[] output, RowMetaInterface info, VariableSpace space,\n    Repository repository, IMetaStore metaStore ) {\n    CheckResult cr;\n    String error_message = \"\";\n\n    if ( Utils.isEmpty( gpglocation ) ) {\n      error_message = BaseMessages.getString( PKG, \"PGPDecryptStreamMeta.CheckResult.GPGLocationMissing\" );\n      cr = new CheckResult( CheckResult.TYPE_RESULT_ERROR, error_message, stepMeta );\n      remarks.add( cr );\n    } else {\n      error_message = BaseMessages.getString( PKG, \"PGPDecryptStreamMeta.CheckResult.GPGLocationOK\" );","sourceCodeStart":247,"sourceCodeEnd":283,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/pgpdecryptstream/PGPDecryptStreamMeta.java#L247-L283","documentation":"PGPDecryptStreamMeta.saveRep throws KettleException when saving the step's attributes (passphrase, stream field, result field, etc.) to the Pentaho Repository fails. The step id is appended to the message for identification.","triggerScenarios":"Calling saveRep when rep.saveStepAttribute throws — repository write failure, connection loss, constraint violation, or read-only repository.","commonSituations":"Repository database locked or down, insufficient write permissions, passphrase containing characters the repository layer rejects, disk full on the repository DB server.","solutions":["Check repository connectivity and retry the save","Verify the user has write permission on the repository","Inspect the wrapped cause for the underlying repository error","If password encryption is the issue, confirm Encr encryption is configured (kettle.encryption.password)"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// Ensure repository is writable before saving\nif (!rep.isConnected()) { throw new IllegalStateException(\"Repository not connected\"); }\n// optionally: test write on a scratch attribute via rep.saveStepAttribute on a test step","typeGuard":null,"tryCatchPattern":"try { meta.saveRep(rep, metaStore, idTrans, idStep); }\ncatch (KettleException e) {\n  if (e.getMessage().contains(\"UnableToSaveStepInfo\")) {\n    log.error(\"Repository save failed for step \" + idStep + \": \" + e.getCause(), e);\n  } else { throw e; }\n}","preventionTips":["Check DB disk space and locks before bulk saves","Grant write permissions to the repository user","Retry saves with backoff on transient connection loss","Verify Encr password encryption config"],"tags":["repository","kettle","persistence","save"],"backgroundTag":"database-write-failed","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}