{"record":{"id":"69a71ee261b7759f","repo":"pentaho/pentaho-kettle","slug":"pentahoreportingoutputmeta-exception-unabletosavestepinfo","errorCode":null,"errorMessage":"PentahoReportingOutputMeta.Exception.UnableToSaveStepInfo","messagePattern":"PentahoReportingOutputMeta\\.Exception\\.UnableToSaveStepInfo","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/pentaho-reporting/impl/src/main/java/org/pentaho/di/trans/steps/pentahoreporting/PentahoReportingOutputMeta.java","lineNumber":273,"sourceCode":"      rep.saveStepAttribute( idTransformation, idStep, XML_TAG_INPUT_FILE_FIELD, inputFileField );\n      rep.saveStepAttribute( idTransformation, idStep, XML_TAG_OUTPUT_FILE_FIELD, outputFileField );\n      rep.saveStepAttribute( idTransformation, idStep, XML_TAG_INPUT_FILE, inputFile );\n      rep.saveStepAttribute( idTransformation, idStep, XML_TAG_OUTPUT_FILE, outputFile );\n      rep.saveStepAttribute( idTransformation, idStep, XML_TAG_USE_VALUES_FROM_FIELDS, useValuesFromFields );\n      rep.saveStepAttribute( idTransformation, idStep, XML_TAG_CREATE_PARENT_FOLDER, createParentFolder );\n      List<String> pars = new ArrayList<String>( parameterFieldMap.keySet() );\n      Collections.sort( pars );\n      for ( int i = 0; i < pars.size(); i++ ) {\n        String parameter = pars.get( i );\n        String fieldname = parameterFieldMap.get( parameter );\n        rep.saveStepAttribute( idTransformation, idStep, i, XML_TAG_PARAMETER + \"_\" + XML_TAG_NAME, parameter );\n        rep.saveStepAttribute( idTransformation, idStep, i, XML_TAG_PARAMETER + \"_\" + XML_TAG_FIELD, fieldname );\n      }\n\n      rep.saveStepAttribute( idTransformation, idStep, XML_TAG_PROCESSOR_TYPE, outputProcessorType.getCode() );\n\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"PentahoReportingOutputMeta.Exception.UnableToSaveStepInfo\" )\n        + idStep, e );\n    }\n  }\n\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\n    // Check output fields\n    if ( prev != null && prev.size() > 0 ) {\n      cr =\n        new CheckResult(\n          CheckResult.TYPE_RESULT_OK, BaseMessages.getString(\n            PKG, \"PentahoReportingOutputMeta.CheckResult.ReceivingFields\", String.valueOf( prev.size() ) ),\n          stepMeta );\n      remarks.add( cr );","sourceCodeStart":255,"sourceCodeEnd":291,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/pentaho-reporting/impl/src/main/java/org/pentaho/di/trans/steps/pentahoreporting/PentahoReportingOutputMeta.java#L255-L291","documentation":"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.","triggerScenarios":"saveRep -> rep.saveStepAttribute(...) throws, then KettleException is thrown with the message concatenated with idStep.","commonSituations":"Repository database connection lost mid-save; read-only repository user/insufficient permissions on r_step_attribute; repository storage full or table locked.","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"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// check write access before saveRep\nif ( !rep.getSessionClient().hasPermission( idTransformation, PermissionType.MODIFY_CONTENT ) ) {\n  throw new KettleException( \"No write permission on repository\" );\n}","typeGuard":null,"tryCatchPattern":"try {\n  meta.saveRep( rep, metaStore, idTransformation, idStep );\n} catch ( KettleException e ) {\n  logError( \"Unable to save step info for \" + idStep + \": \" + e.getMessage(), e );\n  // retry after reconnecting the repository\n}","preventionTips":["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"],"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"}