{"record":{"id":"42e92c9146dc1b53","repo":"pentaho/pentaho-kettle","slug":"unable-to-save-step-information-to-the-repository-for-id-42e92c","errorCode":null,"errorMessage":"Unable to save step information to the repository for id_step=","messagePattern":"Unable to save step information to the repository for id_step=","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/writetolog/WriteToLogMeta.java","lineNumber":291,"sourceCode":"      }\n    } catch ( Exception e ) {\n      throw new KettleException( \"Unexpected error reading step information from the repository\", 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, \"loglevel\", loglevel );\n      rep.saveStepAttribute( id_transformation, id_step, \"displayHeader\", displayHeader );\n      rep.saveStepAttribute( id_transformation, id_step, \"limitRows\", limitRows );\n      rep.saveStepAttribute( id_transformation, id_step, \"limitRowsNumber\", limitRowsNumber );\n      rep.saveStepAttribute( id_transformation, id_step, \"logmessage\", logmessage );\n      for ( int i = 0; i < fieldName.length; i++ ) {\n        rep.saveStepAttribute( id_transformation, id_step, i, \"field_name\", fieldName[i] );\n      }\n    } catch ( Exception e ) {\n      throw new KettleException( \"Unable to save step information to the repository for id_step=\" + 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    if ( prev == null || prev.size() == 0 ) {\n      cr =\n        new CheckResult( CheckResult.TYPE_RESULT_WARNING, BaseMessages.getString(\n          PKG, \"WriteToLogMeta.CheckResult.NotReceivingFields\" ), stepMeta );\n      remarks.add( cr );\n    } else {\n      cr =\n        new CheckResult( CheckResult.TYPE_RESULT_OK, BaseMessages.getString(\n          PKG, \"WriteToLogMeta.CheckResult.StepRecevingData\", prev.size() + \"\" ), stepMeta );\n      remarks.add( cr );","sourceCodeStart":273,"sourceCodeEnd":309,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/writetolog/WriteToLogMeta.java#L273-L309","documentation":"WriteToLogMeta.saveRep() persists step settings (limitRowsNumber, logmessage, per-row field_name attributes) via rep.saveStepAttribute(). Any exception during these writes is wrapped in a KettleException with 'Unable to save step information to the repository for id_step=' plus the step id. It indicates the step's configuration could not be committed to the repository.","triggerScenarios":"Calling saveRep() when the repository write fails: connection lost, constraint violation, read-only user, or oversized logmessage/field values — any Exception in the try block is wrapped at this line.","commonSituations":"Read-only repository credentials; repository database disk full or table locked; saving a transformation whose step id no longer exists (stale object); long field names exceeding column width.","solutions":["Check the wrapped cause for the concrete JDBC error (connection, constraint, permissions) and fix that first.","Confirm the repository user has INSERT/UPDATE rights on r_step_attribute.","Reconnect to the repository and retry saving the transformation.","Shorten logmessage/field values if a length constraint was violated; then re-save."],"exampleFix":"// before: saving with a read-only account fails\n// after: connect with an account holding write privileges on repository tables\nRepository rep = KettleDatabaseRepository.connect(...); // user with INSERT/UPDATE","handlingStrategy":"try-catch","validationCode":"if (!repository.isConnected()) {\n  throw new KettleException(\"Repository not connected before saveRep\");\n}\nif (meta.getLogMessage() != null && meta.getLogMessage().length() > 4000) {\n  throw new KettleException(\"logmessage exceeds column capacity\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  meta.saveRep(repository, metaStore, idTransformation, idStep);\n} catch (KettleException e) {\n  log.error(\"Repository save failed: \" + e.getCause(), e);\n  // check write permissions/connection, then retry\n}","preventionTips":["Save with accounts that have INSERT/UPDATE rights on repository tables.","Keep logmessage and field names within column size limits.","Reconnect stale repository sessions before saving.","Test repository save in a dev environment after DB upgrades."],"tags":["kettle","repository","database","metadata-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"}