pentaho/pentaho-kettle · error · KettleException
DimensionLookupMeta.Exception.UnexpectedErrorReadingStepInfo…
Error message
DimensionLookupMeta.Exception.UnexpectedErrorReadingStepInfoFromRepository
What it means
DimensionLookupMeta.readRep wraps any exception that occurs while reading this step's configuration attributes from the Kettle repository into a KettleException with this message key. It indicates the step definition stored in the repository could not be read (attribute lookup failed unexpectedly), with the original cause attached.
Solutions
- Inspect the wrapped cause (KettleException.getCause()) to identify the actual repository failure
- Verify the step record exists and is intact in the repository; re-save the transformation
- Check repository connectivity/credentials and retry loading the transformation
- Recreate the Dimension Lookup step if its repository record is corrupted
Example fix
// before
DimensionLookupMeta meta = new DimensionLookupMeta();
meta.readRep(rep, metaStore, idStep, null);
// after
try {
DimensionLookupMeta meta = new DimensionLookupMeta();
meta.readRep(rep, metaStore, idStep, null);
} catch (KettleException e) {
logError("Failed reading Dimension Lookup step " + idStep + " from repository: " + e.getCause(), e);
throw e;
} Defensive patterns
Strategy: try-catch
Validate before calling
// Verify repository and step accessibility before readRep
if (!rep.isConnected()) throw new IllegalStateException("Repository not connected");
StepMeta step = transMeta.findStep(stepName);
if (step == null) throw new IllegalArgumentException("Step not found: " + stepName); Try / catch
try {
meta.readRep(rep, metaStore, idStep, null);
} catch (KettleException e) {
logError("Repository read failed for step " + idStep + ": " + e.getCause(), e);
throw e;
} Prevention
- Always log e.getCause() — the real repository failure is wrapped
- Keep repository connections healthy (timeouts, reconnect settings)
- Re-save steps from Spoon after PDI upgrades to refresh stored attributes
- Back up repository records before migrations
When it happens
Trigger: Calling readRep(Repository, MetaStore, ObjectId id_step, ...) when a repository API call such as rep.getStepAttributeBoolean/String throws for the given id_step (corrupt or missing step record, repository connectivity failure mid-read).
Common situations: Corrupt repository rows after failed upgrades; a transformation XML/DB record missing expected step attributes; network or session loss to the repository server while loading a transformation.
Understand the failure class
Background: "failed to read file", EACCES, ENOENT and "could not read <path>" errors: when a program can't read a file from disk — this error's family across 49 libraries.
Related errors
- AnalyticQueryMeta.Exception.UnexpectedErrorInReadingStepInfo…
- AnalyticQueryMeta.Exception.UnableToSaveStepInfoToRepository
- DatabaseJoinMeta.Exception.UnableToSaveStepInfo + id_step
- ERROR0003.UnableToSaveStepToRepository
- Unable to load shared objects
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/e81fb205ec873375.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/dimensionlookup/DimensionLookupMeta.java:1018
keyRename = rep.getStepAttributeString( id_step, "return_rename" );
autoIncrement = rep.getStepAttributeBoolean( id_step, "use_autoinc" );
versionField = rep.getStepAttributeString( id_step, "version_field" );
techKeyCreation = rep.getStepAttributeString( id_step, "creation_method" );
if ( update ) { // symmetry with readData above ...
sequenceName = rep.getStepAttributeString( id_step, "sequence" );
}
minYear = (int) rep.getStepAttributeInteger( id_step, "min_year" );
maxYear = (int) rep.getStepAttributeInteger( id_step, "max_year" );
cacheSize = (int) rep.getStepAttributeInteger( id_step, "cache_size" );
preloadingCache = rep.getStepAttributeBoolean( id_step, "preload_cache" );
useBatchUpdate = rep.getStepAttributeBoolean( id_step, "useBatch" );
usingStartDateAlternative = rep.getStepAttributeBoolean( id_step, "use_start_date_alternative" );
startDateAlternative = getStartDateAlternative( rep.getStepAttributeString( id_step, "start_date_alternative" ) );
startDateFieldName = rep.getStepAttributeString( id_step, "start_date_field_name" );
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString( PKG,
"DimensionLookupMeta.Exception.UnexpectedErrorReadingStepInfoFromRepository" ), e );
}
}
@Override
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step )
throws KettleException {
try {
actualizeWithInjectedValues();
rep.saveStepAttribute( id_transformation, id_step, "schema", schemaName );
rep.saveStepAttribute( id_transformation, id_step, "table", tableName );
rep.saveDatabaseMetaStepAttribute( id_transformation, id_step, "id_connection", databaseMeta );
rep.saveStepAttribute( id_transformation, id_step, "commit", commitSize );
rep.saveStepAttribute( id_transformation, id_step, "update", update );
for ( int i = 0; i < keyStream.length; i++ ) {
rep.saveStepAttribute( id_transformation, id_step, i, "lookup_key_name", keyStream[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "lookup_key_field", keyLookup[i] );View on GitHub (pinned to f3058517a1)