{"record":{"id":"b690d9997e01dffe","repo":"pentaho/pentaho-kettle","slug":"unable-to-save-step-information-to-the-repository-for-id-b690d9","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":"plugins/meta-inject/impl/src/main/java/org/pentaho/di/trans/steps/metainject/MetaInjectMeta.java","lineNumber":366,"sourceCode":"        rep.saveStepAttribute( id_transformation, id_step, i, SOURCE_OUTPUT_FIELD_PRECISION, aField.getPrecision() );\n      }\n\n      rep.saveStepAttribute( id_transformation, id_step, TARGET_FILE, targetFile );\n      rep.saveStepAttribute( id_transformation, id_step, NO_EXECUTION, noExecution );\n\n      List<TargetStepAttribute> keySet = new ArrayList<TargetStepAttribute>( targetSourceMapping.keySet() );\n      for ( int i = 0; i < keySet.size(); i++ ) {\n        TargetStepAttribute target = keySet.get( i );\n        SourceStepField source = targetSourceMapping.get( target );\n\n        rep.saveStepAttribute( id_transformation, id_step, i, MAPPING_TARGET_STEP_NAME, target.getStepname() );\n        rep.saveStepAttribute( id_transformation, id_step, i, MAPPING_TARGET_ATTRIBUTE_KEY, target.getAttributeKey() );\n        rep.saveStepAttribute( id_transformation, id_step, i, MAPPING_TARGET_DETAIL, target.isDetail() );\n        rep.saveStepAttribute( id_transformation, id_step, i, MAPPING_SOURCE_STEP, source.getStepname() );\n        rep.saveStepAttribute( id_transformation, id_step, i, MAPPING_SOURCE_FIELD, source.getField() );\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 getFields( Bowl bowl, RowMetaInterface rowMeta, String origin, RowMetaInterface[] info, StepMeta nextStep,\n                         VariableSpace space, Repository repository, IMetaStore metaStore ) throws KettleStepException {\n\n    rowMeta.clear(); // No defined output is expected from this step.\n    if ( !Utils.isEmpty( sourceStepName ) ) {\n      for ( MetaInjectOutputField field : sourceOutputFields ) {\n        try {\n          rowMeta.addValueMeta( field.createValueMeta() );\n        } catch ( KettlePluginException e ) {\n          throw new KettleStepException( \"Error creating value meta for output field '\" + field.getName() + \"'\", e );\n        }\n      }\n    }\n  }","sourceCodeStart":348,"sourceCodeEnd":384,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/meta-inject/impl/src/main/java/org/pentaho/di/trans/steps/metainject/MetaInjectMeta.java#L348-L384","documentation":"MetaInjectMeta.saveRep() writes each target/source mapping entry as numbered step attributes. Any exception during these saveStepAttribute calls is wrapped in a KettleException including the failing id_step. The transformation cannot be persisted to the repository.","triggerScenarios":"saveRep(rep, metaStore, id_transformation, id_step) failing on repository I/O errors, locked/readonly repository connections, or oversized mapping tables.","commonSituations":"Repository database out of space or read-only; connection lost mid-save; saving a transformation with hundreds of injection mappings exceeding DB limits.","solutions":["Check the wrapped cause for the underlying repository/SQL error.","Verify the repository database is writable and has free space.","Reduce the number of injection mappings if attribute rows hit a storage limit.","Reconnect to the repository and retry the save."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// Verify repository is writable before saving\nif (rep.isReadOnly()) throw new IllegalStateException(\"Repository is read-only\");","typeGuard":null,"tryCatchPattern":"try {\n  meta.saveRep(rep, metaStore, id_transformation, id_step);\n} catch (KettleException e) {\n  logError(\"Save failed for id_step=\" + id_step + \": \" + e.getCause(), e);\n  // retry after reconnecting to the repository\n}","preventionTips":["Check repository disk space and write permissions","Reconnect/retry on transient DB failures","Avoid very large mapping tables in a single step"],"tags":["repository","kettle","meta-inject","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"}