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
- Reconnect to the repository and retry loading the transformation
- Check repository database connectivity and logs (JDBC URL, credentials, network)
- Verify id_step still exists: reload the transformation list; re-save if the step row is missing
- Run repository maintenance/repair (e.g. re-run repo DDL check) if tables are corrupted
- 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
- Ensure repository connectivity before batch-loading transformations
- Avoid deleting/modifying transformations in another session while loading
- Monitor repository DB health and credentials expiry
- Keep repository schema version aligned with your Pentaho version
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
- FuzzyMatchMeta.Exception.UnableToSaveStepInfoToRepository
- GetTableNamesMeta.Exception.UnableToSaveStepInfo
- GetXMLDataMeta.Exception.ErrorReadingRepository (localized…
- GetXMLDataMeta.Exception.ErrorSavingToRepository (localized…
- GPBulkLoaderMeta.Exception.UnexpectedErrorReadingStepInfoFro…
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)