{"record":{"id":"0b5d80548cd4f7f2","repo":"pentaho/pentaho-kettle","slug":"unable-to-save-step-information-to-the-repository-for-idstep-0b5d80","errorCode":null,"errorMessage":"Unable to save step information to the repository for idStep=","messagePattern":"Unable to save step information to the repository for idStep=","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/palo/core/src/main/java/org/pentaho/di/trans/steps/palo/celloutput/PaloCellOutputMeta.java","lineNumber":281,"sourceCode":"      rep.saveStepAttribute( idTransformation, idStep, \"updateMode\", this.updateMode );\n      rep.saveStepAttribute( idTransformation, idStep, \"splashMode\", this.splashMode );\n      rep.saveStepAttribute( idTransformation, idStep, \"clearcube\", this.clearCube );\n      rep.saveStepAttribute( idTransformation, idStep, \"preloadDimensionCache\", this.preloadDimensionCache );\n      rep.saveStepAttribute( idTransformation, idStep, \"enableDimensionCache\", this.enableDimensionCache );\n      rep.saveStepAttribute( idTransformation, idStep, \"commitSize\", this.commitSize );\n\n      rep.saveStepAttribute( idTransformation, idStep, \"measurename\", this.measureField.getDimensionName() );\n      rep.saveStepAttribute( idTransformation, idStep, \"measurefieldname\", this.measureField.getFieldName() );\n      rep.saveStepAttribute( idTransformation, idStep, \"measurefieldtype\", this.measureField.getFieldType() );\n\n      for ( int i = 0; i < this.fields.size(); i++ ) {\n        rep.saveStepAttribute( idTransformation, idStep, i, \"dimensionname\", this.fields.get( i ).getDimensionName() );\n        rep.saveStepAttribute( idTransformation, idStep, i, \"fieldname\", this.fields.get( i ).getFieldName() );\n        rep.saveStepAttribute( idTransformation, idStep, i, \"fieldtype\", this.fields.get( i ).getFieldType() );\n      }\n\n    } catch ( Exception e ) {\n      throw new KettleException( \"Unable to save step information to the repository for idStep=\" + idStep, e );\n    }\n  }\n\n  public final void check( final List<CheckResultInterface> remarks, final TransMeta transMeta,\n                           final StepMeta stepMeta, final RowMetaInterface prev,\n                           final String[] input, final String[] output, final RowMetaInterface info,\n                           VariableSpace space, Repository repository, IMetaStore metaStore ) {\n\n    CheckResult cr;\n\n    if ( databaseMeta != null ) {\n      cr = new CheckResult( CheckResultInterface.TYPE_RESULT_OK, \"Connection exists\", stepMeta );\n      remarks.add( cr );\n\n      final PaloHelper helper = new PaloHelper( databaseMeta, DefaultLogLevel.getLogLevel() );\n      try {\n        helper.connect();\n        cr = new CheckResult( CheckResultInterface.TYPE_RESULT_OK, \"Connection to database OK\", stepMeta );","sourceCodeStart":263,"sourceCodeEnd":299,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/palo/core/src/main/java/org/pentaho/di/trans/steps/palo/celloutput/PaloCellOutputMeta.java#L263-L299","documentation":"KettleException thrown by PaloCellOutputMeta.saveRep when saving the step's attributes to the Pentaho Repository fails. All saveStepAttribute calls (connection, dimensions, measure field) are inside one try block; any repository write error is wrapped with the step id appended to the message.","triggerScenarios":"Saving a transformation to the repository while the database connection is down, the transaction fails, or a saveStepAttribute write for 'connection', 'dimensionname', 'fieldname', 'fieldtype', or measure attributes throws.","commonSituations":"Repository database read-only or out of space; network drop between Spoon and repository DB mid-save; repository permissions insufficient for INSERT/UPDATE on R_STEP_ATTRIBUTE; deadlock on concurrent saves.","solutions":["Check the wrapped cause: fix repository DB connectivity, permissions, or disk space and re-save the transformation.","Confirm the repository user has INSERT/UPDATE rights on R_STEP_ATTRIBUTE.","Retry the save; if deadlocks occur, avoid concurrent edits of the same transformation.","Fall back to saving the transformation as a local .ktr file, then import it into the repository later."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// Pre-check write access\nif (!rep.getConnection().isReadOnly()) { /* proceed with save */ }","typeGuard":null,"tryCatchPattern":"try {\n  transMeta.saveRep(rep, metaStore, idTransformation);\n} catch (KettleException e) {\n  log.error(\"Save failed: \" + e.getCause(), e);\n  // fall back to local file save\n  transMeta.saveXml(localPath, null);\n}","preventionTips":["Ensure repository user has INSERT/UPDATE rights on R_STEP_ATTRIBUTE","Monitor repository DB disk space and read-only flags","Avoid concurrent edits of the same transformation","Save locally before repository sync"],"tags":["repository","persistence","write","palo"],"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"}