pentaho/pentaho-kettle · error · KettleException
StreamLookupMeta.Exception.UnexpecteErrorReadingStepInfoFrom…
Error message
StreamLookupMeta.Exception.UnexpecteErrorReadingStepInfoFromRepository
What it means
StreamLookupMeta throws this KettleException when an unexpected exception occurs while reading the Stream Lookup step's settings from the Pentaho repository during readRep(). The message wraps the underlying exception (e.g. repository connectivity or attribute-read failures). It indicates the step metadata could not be loaded, so the transformation definition is incomplete.
Solutions
- Check the wrapped cause exception to identify the real repository/parse failure
- Verify the repository connection is healthy and retry loading the transformation
- Inspect the r_step_attribute rows for this step id for missing or corrupt 'return_*' attributes
- Re-open and re-save the step in Spoon to rewrite its repository attributes
Example fix
// before throw new KettleException(BaseMessages.getString(PKG, "StreamLookupMeta.Exception.UnexpecteErrorReadingStepInfoFromRepository"), e); // after // fix the cause: verify repository connectivity / repair step attributes, then // log e at DEBUG and retry readRep with a fresh Repository connection
Defensive patterns
Strategy: try-catch
Validate before calling
// before load if (!repository.isConnected()) repository.connect(user, pass); ObjectId idStep = transMeta.getStepMeta(stepName).getStepMetaInterface() != null ? null : null; // ensure step exists // verify step record exists before readRep: // ObjectId id = repository.getStepID(loggedObject, stepName) / check repository.getObjectInformation(idStep, ...) != null
Type guard
boolean isStepPresent(Repository rep, ObjectId idStep) {
try { return idStep != null && rep.getObjectInformation(idStep, RepositoryObjectType.TRANSFORMATION) != null; }
catch (Exception e) { return false; }
} Try / catch
try {
streamLookupMeta.readRep(repository, metaStore, idStep, databases);
} catch (KettleException e) {
logError("Failed to read StreamLookup step from repository: " + e.getCause(), e);
// rebuild step defaults: streamLookupMeta.setDefault();
} Prevention
- Keep repository connections alive/healthy before loading transformations
- Verify step attribute rows exist after repository imports/migrations
- Log and inspect the cause chain, not just the wrapper message
- Re-save steps in Spoon after version upgrades to refresh stored attributes
When it happens
Trigger: Calling readRep() when rep.getStepAttributeString(...) or ValueMetaFactory.getIdForValueMeta(...) throws — e.g. repository connection drops mid-read, id_step refers to a missing/corrupt step record, or an invalid return_value_type string.
Common situations: Corrupt or partially migrated repository rows for a Stream Lookup step; stale repository sessions; renaming value type names between Pentaho versions so getIdForValueMeta fails.
Understand the failure class
Background: Database query failed: Internal Server Error 500s wrapping SQL, Prisma, and connection failures — what to check first — this error's family across 16 libraries.
Related errors
- StringCutMeta.Exception.UnexpectedErrorInReadingStepInfo
- Edi2Xml.Exception.UnexpectedErrorInReadingStepInfo
- FilterRowsMeta.Exception.UnexpectedErrorInReadingStepInfoFromRepository
- FlattenerMeta.Exception.UnexpectedErrorInReadingStepInfoFromRepository
- StringOperationsMeta.Exception.UnexpectedErrorInReadingStepI…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/cfd6bcdef70e9611.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/streamlookup/StreamLookupMeta.java:308
for ( int i = 0; i < nrkeys; i++ ) {
// CHECKSTYLE:Indentation:OFF
getKeystream()[i] = rep.getStepAttributeString( id_step, i, "lookup_key_name" );
getKeylookup()[i] = rep.getStepAttributeString( id_step, i, "lookup_key_field" );
// CHECKSTYLE:Indentation:ON
}
for ( int i = 0; i < nrvalues; i++ ) {
// CHECKSTYLE:Indentation:OFF
getValue()[i] = rep.getStepAttributeString( id_step, i, "return_value_name" );
getValueName()[i] = rep.getStepAttributeString( id_step, i, "return_value_rename" );
getValueDefault()[i] = rep.getStepAttributeString( id_step, i, "return_value_default" );
getValueDefaultType()[i] =
ValueMetaFactory.getIdForValueMeta( rep.getStepAttributeString( id_step, i, "return_value_type" ) );
// CHECKSTYLE:Indentation:ON
}
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString(
PKG, "StreamLookupMeta.Exception.UnexpecteErrorReadingStepInfoFromRepository" ), e );
}
}
@Override
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, "input_sorted", isInputSorted() );
rep.saveStepAttribute( id_transformation, id_step, "preserve_memory", isMemoryPreservationActive() );
rep.saveStepAttribute( id_transformation, id_step, "sorted_list", isUsingSortedList() );
rep.saveStepAttribute( id_transformation, id_step, "integer_pair", isUsingIntegerPair() );
for ( int i = 0; i < getKeystream().length; i++ ) {
rep.saveStepAttribute( id_transformation, id_step, i, "lookup_key_name", getKeystream()[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "lookup_key_field", getKeylookup()[i] );
}View on GitHub (pinned to f3058517a1)