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

  1. Check the wrapped cause exception to identify the real repository/parse failure
  2. Verify the repository connection is healthy and retry loading the transformation
  3. Inspect the r_step_attribute rows for this step id for missing or corrupt 'return_*' attributes
  4. 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

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


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)