{"record":{"id":"f120362bbc74d91b","repo":"pentaho/pentaho-kettle","slug":"pgpencryptstreammeta-exception-unabletosavestepinfo","errorCode":null,"errorMessage":"PGPEncryptStreamMeta.Exception.UnableToSaveStepInfo","messagePattern":"PGPEncryptStreamMeta\\.Exception\\.UnableToSaveStepInfo","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/pgpencryptstream/PGPEncryptStreamMeta.java","lineNumber":260,"sourceCode":"      streamfield = rep.getStepAttributeString( id_step, \"streamfield\" );\n      resultfieldname = rep.getStepAttributeString( id_step, \"resultfieldname\" );\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"PGPEncryptStreamMeta.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, \"keyname\", keyname );\n      rep.saveStepAttribute( id_transformation, id_step, \"keynameInField\", keynameInField );\n      rep.saveStepAttribute( id_transformation, id_step, \"keynameFieldName\", keynameFieldName );\n      rep.saveStepAttribute( id_transformation, id_step, \"streamfield\", streamfield );\n      rep.saveStepAttribute( id_transformation, id_step, \"resultfieldname\", resultfieldname );\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"PGPEncryptStreamMeta.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, \"PGPEncryptStreamMeta.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, \"PGPEncryptStreamMeta.CheckResult.GPGLocationOK\" );","sourceCodeStart":242,"sourceCodeEnd":278,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/pgpencryptstream/PGPEncryptStreamMeta.java#L242-L278","documentation":"KettleException thrown by PGPEncryptStreamMeta.saveRep when persisting the step's attributes to the repository fails. Each rep.saveStepAttribute call writes the PGP step settings; any exception is wrapped with this message plus the step id. It means the step's configuration could not be saved.","triggerScenarios":"saveRep is invoked when saving a transformation and a rep.saveStepAttribute call throws (write failure, read-only connection, constraint violation, connection loss).","commonSituations":"Repository DB read-only or out of space; network failure during save; repository user lacks write privileges.","solutions":["Check repository connection and retry saving the transformation.","Verify the repository user has write permission on the transformation.","Check database disk space and constraint errors in the underlying repository DB logs."],"exampleFix":"// before: saving with read-only repository user\nrep.save(transMeta, \"path\", null, true); // throws\n// after: save with a user granted INSERT/UPDATE on repository tables\nrep = KettleDatabaseRepository ... connect(\"admin\", password); // writable account","handlingStrategy":"try-catch","validationCode":"// Pre-save check: writable repository and connectivity\nif (!rep.isConnected()) throw new KettleException(\"Repository not connected\");\n// e.g. attempt a trivial write or check user privileges beforehand","typeGuard":null,"tryCatchPattern":"try { rep.save(transMeta, path, null, true); } catch (KettleException e) { log.error(\"Save failed for step \" + idStep + \": \" + e.getCause(), e); throw e; }","preventionTips":["Use a repository account with write privileges","Monitor DB disk space and connection pool health","Save to file as backup before repository saves"],"tags":["kettle","repository","persistence"],"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"}