pentaho/pentaho-kettle · error · KettleException

FuzzyMatchMeta.Exception.UnableToSaveStepInfoToRepository

Error message

FuzzyMatchMeta.Exception.UnableToSaveStepInfoToRepository

What it means

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.

Solutions

  1. Check repository write permissions / use an account with insert rights on R_STEP_ATTRIBUTE
  2. Reconnect and retry saving; fix transient JDBC/network errors
  3. Save the transformation to file (.ktr) as a workaround, then retry repository save later
  4. Check repository DB constraints/size (disk space, table locks) and clear conflicts

Example fix

// before
repository.save(transMeta, "my transformation", null);
// after (fallback to file when repo save fails)
try {
  repository.save(transMeta, "my transformation", null);
} catch (KettleException e) {
  new TransMeta(transMeta).writeFile("local_backup.ktr", "overwrite");
}
Defensive patterns

Strategy: try-catch

Validate before calling

if (rep == null || !rep.isConnected()) throw new IllegalStateException("Repository must be connected before saving");

Try / catch

try { repository.save(transMeta, null, null); } catch (KettleException e) { /* fallback to file */ }

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/9b39583e4f5144c1. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/fuzzymatch/FuzzyMatchMeta.java:591

      rep.saveStepAttribute( id_transformation, id_step, "lookup_from_step", infoStream.getStepname() );
      rep.saveStepAttribute( id_transformation, id_step, "lookupfield", lookupfield );
      rep.saveStepAttribute( id_transformation, id_step, "mainstreamfield", mainstreamfield );
      rep.saveStepAttribute( id_transformation, id_step, "outputmatchfield", outputmatchfield );
      rep.saveStepAttribute( id_transformation, id_step, "outputvaluefield", outputvaluefield );

      rep.saveStepAttribute( id_transformation, id_step, "caseSensitive", caseSensitive );
      rep.saveStepAttribute( id_transformation, id_step, "closervalue", closervalue );
      rep.saveStepAttribute( id_transformation, id_step, "minimalValue", minimalValue );
      rep.saveStepAttribute( id_transformation, id_step, "maximalValue", maximalValue );
      rep.saveStepAttribute( id_transformation, id_step, "separator", separator );
      rep.saveStepAttribute( id_transformation, id_step, "algorithm", getAlgorithmTypeCode( algorithm ) );

      for ( int i = 0; i < value.length; i++ ) {
        rep.saveStepAttribute( id_transformation, id_step, i, "return_value_name", value[i] );
        rep.saveStepAttribute( id_transformation, id_step, i, "return_value_rename", valueName[i] );
      }
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "FuzzyMatchMeta.Exception.UnableToSaveStepInfoToRepository" )
        + id_step, e );
    }
  }

  public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepMeta,
    RowMetaInterface prev, String[] input, String[] output, RowMetaInterface info, VariableSpace space,
    Repository repository, IMetaStore metaStore ) {
    CheckResult cr;

    if ( prev != null && prev.size() > 0 ) {
      cr =
        new CheckResult( CheckResult.TYPE_RESULT_OK, BaseMessages.getString(
          PKG, "FuzzyMatchMeta.CheckResult.StepReceivingFields", prev.size() + "" ), stepMeta );
      remarks.add( cr );

      // Starting from selected fields in ...
      // Check the fields from the previous stream!

View on GitHub (pinned to f3058517a1)