pentaho/pentaho-kettle · error · KettleException

FuzzyMatchMeta.Exception.UnexpecteErrorReadingStepInfoFromRe…

Error message

FuzzyMatchMeta.Exception.UnexpecteErrorReadingStepInfoFromRepository

What it means

readRep() loads the FuzzyMatch step configuration from a repository; any Exception during reading step attributes is wrapped in a KettleException with message 'FuzzyMatchMeta.Exception.UnexpecteErrorReadingStepInfoFromRepository'. It signals repository storage for the step definition could not be read, and the original exception is kept as the cause.

Solutions

  1. Reconnect to the repository and retry loading the transformation
  2. Check repository database connectivity and logs (JDBC URL, credentials, network)
  3. Verify id_step still exists: reload the transformation list; re-save if the step row is missing
  4. Run repository maintenance/repair (e.g. re-run repo DDL check) if tables are corrupted
  5. Load the transformation from file (.ktr) instead as a workaround

Example fix

// before
transMeta = new TransMeta(rep, "MyTrans", metaStore);
// after (retry with fresh connection)
repository.disconnect();
repository.connect("user", "password");
transMeta = new TransMeta(rep, "MyTrans", metaStore);
Defensive patterns

Strategy: try-catch

Validate before calling

if (!repository.isConnected() || !repository.getSecurityProvider().getUserInfo().isUserSet()) {
  throw new IllegalStateException("Repository not connected; reconnect before loading transformations");
}

Try / catch

try {
  meta.readRep(rep, metaStore, id_step, databases);
} catch (KettleException e) {
  log.error("Repository read failed for step " + id_step + ": " + e.getCause(), e);
  repository.disconnect();
  repository.connect(user, pass);
  meta.readRep(rep, metaStore, id_step, databases); // retry once on fresh connection
}

Prevention

When it happens

Trigger: readRep(rep, id_step, ...) hits exceptions when calling rep.getStepAttributeString/getStepAttributeBoolean/getStepAttributeCount — e.g. repository connection dropped mid-read, id_step no longer exists, or a JDBC/IO error while fetching 'return_value_name'/'return_value_rename' attributes.

Common situations: Stale or broken database repository connection; transformation deleted or modified by another user while loading; network failure to the repository database; corrupted repository tables.

Related errors


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

Appendix: source

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

      outputvaluefield = rep.getStepAttributeString( id_step, "outputvaluefield" );

      caseSensitive = rep.getStepAttributeBoolean( id_step, "caseSensitive" );
      closervalue = rep.getStepAttributeBoolean( id_step, "closervalue" );
      minimalValue = rep.getStepAttributeString( id_step, "minimalValue" );
      maximalValue = rep.getStepAttributeString( id_step, "maximalValue" );
      separator = rep.getStepAttributeString( id_step, "separator" );

      algorithm = getAlgorithmTypeByCode( Const.NVL( rep.getStepAttributeString( id_step, "algorithm" ), "" ) );

      int nrvalues = rep.countNrStepAttributes( id_step, "return_value_name" );
      allocate( nrvalues );

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

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
    try {
      StreamInterface infoStream = getStepIOMeta().getInfoStreams().get( 0 );
      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 );

View on GitHub (pinned to f3058517a1)