{"record":{"id":"9b39583e4f5144c1","repo":"pentaho/pentaho-kettle","slug":"fuzzymatchmeta-exception-unabletosavestepinfotorepository","errorCode":null,"errorMessage":"FuzzyMatchMeta.Exception.UnableToSaveStepInfoToRepository","messagePattern":"FuzzyMatchMeta\\.Exception\\.UnableToSaveStepInfoToRepository","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/fuzzymatch/FuzzyMatchMeta.java","lineNumber":591,"sourceCode":"      rep.saveStepAttribute( id_transformation, id_step, \"lookup_from_step\", infoStream.getStepname() );\n      rep.saveStepAttribute( id_transformation, id_step, \"lookupfield\", lookupfield );\n      rep.saveStepAttribute( id_transformation, id_step, \"mainstreamfield\", mainstreamfield );\n      rep.saveStepAttribute( id_transformation, id_step, \"outputmatchfield\", outputmatchfield );\n      rep.saveStepAttribute( id_transformation, id_step, \"outputvaluefield\", outputvaluefield );\n\n      rep.saveStepAttribute( id_transformation, id_step, \"caseSensitive\", caseSensitive );\n      rep.saveStepAttribute( id_transformation, id_step, \"closervalue\", closervalue );\n      rep.saveStepAttribute( id_transformation, id_step, \"minimalValue\", minimalValue );\n      rep.saveStepAttribute( id_transformation, id_step, \"maximalValue\", maximalValue );\n      rep.saveStepAttribute( id_transformation, id_step, \"separator\", separator );\n      rep.saveStepAttribute( id_transformation, id_step, \"algorithm\", getAlgorithmTypeCode( algorithm ) );\n\n      for ( int i = 0; i < value.length; i++ ) {\n        rep.saveStepAttribute( id_transformation, id_step, i, \"return_value_name\", value[i] );\n        rep.saveStepAttribute( id_transformation, id_step, i, \"return_value_rename\", valueName[i] );\n      }\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"FuzzyMatchMeta.Exception.UnableToSaveStepInfoToRepository\" )\n        + id_step, 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    if ( prev != null && prev.size() > 0 ) {\n      cr =\n        new CheckResult( CheckResult.TYPE_RESULT_OK, BaseMessages.getString(\n          PKG, \"FuzzyMatchMeta.CheckResult.StepReceivingFields\", prev.size() + \"\" ), stepMeta );\n      remarks.add( cr );\n\n      // Starting from selected fields in ...\n      // Check the fields from the previous stream!","sourceCodeStart":573,"sourceCodeEnd":609,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/fuzzymatch/FuzzyMatchMeta.java#L573-L609","documentation":"saveRep() persists the FuzzyMatch step configuration to a repository; when saving step attributes (lookup/return value names) throws, it wraps the exception in a KettleException 'FuzzyMatchMeta.Exception.UnableToSaveStepInfoToRepository' plus the step id. The original exception is attached as cause.","triggerScenarios":"saveRep(rep, metaStore, id_transformation, id_step) fails while calling rep.saveStepAttribute(...) for 'return_value_name'/'return_value_rename' rows — repository write error, lock/permission issue, constraint violation, or connection loss during the loop.","commonSituations":"Read-only database repository credentials; repository DB transaction rollback or deadlock; disk full on the repository server; concurrent edits to the same transformation causing conflicts.","solutions":["Check repository write permissions / use an account with insert rights on R_STEP_ATTRIBUTE","Reconnect and retry saving; fix transient JDBC/network errors","Save the transformation to file (.ktr) as a workaround, then retry repository save later","Check repository DB constraints/size (disk space, table locks) and clear conflicts"],"exampleFix":"// before\nrepository.save(transMeta, \"my transformation\", null);\n// after (fallback to file when repo save fails)\ntry {\n  repository.save(transMeta, \"my transformation\", null);\n} catch (KettleException e) {\n  new TransMeta(transMeta).writeFile(\"local_backup.ktr\", \"overwrite\");\n}","handlingStrategy":"try-catch","validationCode":"if (rep == null || !rep.isConnected()) throw new IllegalStateException(\"Repository must be connected before saving\");","typeGuard":null,"tryCatchPattern":"try { repository.save(transMeta, null, null); } catch (KettleException e) { /* fallback to file */ }","preventionTips":["Use repository credentials with write permissions","Avoid concurrent edits to the same transformation","Ensure repository DB has free space"],"tags":["repository","persistence","write-failed","pentaho-kettle"],"backgroundTag":"repo-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"}