pentaho/pentaho-kettle · error · KettleException

AppendMeta.Exception.UnexpectedErrorReadingStepInfo

Error message

AppendMeta.Exception.UnexpectedErrorReadingStepInfo

What it means

AppendMeta.readRep throws KettleException wrapping 'AppendMeta.Exception.UnexpectedErrorReadingStepInfo' when reading the Append step's head_name/tail_name attributes from the repository fails. Any exception from rep.getStepAttributeString or the stream lookup is wrapped. It means the step definition could not be loaded from the database repository.

Solutions

  1. Verify repository database connectivity and retry opening the transformation.
  2. Check r_step_attribute rows for the step's id_step; re-save the transformation from Spoon.
  3. Confirm the repository schema matches your Pentaho version (run repository upgrade scripts).
  4. Export the transformation to XML and reload if repository records are corrupt.
Defensive patterns

Strategy: try-catch

Validate before calling

// Before loading: verify repository connectivity
if (rep == null || !rep.isConnected()) {
  throw new IllegalStateException("Repository not connected before loadTransformLog");
}

Try / catch

try {
  TransMeta meta = new TransMeta(rep, transObjectId, metaStore);
} catch (KettleException e) {
  logError("Repository read of transformation failed: " + e.getMessage(), e);
  // retry after reconnecting the repository
}

Prevention

When it happens

Trigger: Loading a transformation from a Kettle repository where r_step_attribute rows are unreadable, the id_step is stale, or the repository connection breaks during getStepAttributeString calls.

Common situations: Corrupt or partially migrated repository database; repository schema version mismatch with the Kettle client; transient DB connectivity loss while opening a transformation.

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/b2c27868a3a67c9d. Report an issue: GitHub.

Appendix: source

Thrown at plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/append/AppendMeta.java:115

      headStream.setSubject( XMLHandler.getTagValue( stepnode, "head_name" ) );
      tailStream.setSubject( XMLHandler.getTagValue( stepnode, "tail_name" ) );
    } catch ( Exception e ) {
      throw new KettleXMLException( BaseMessages.getString( PKG, "AppendMeta.Exception.UnableToLoadStepInfo" ), e );
    }
  }

  public void setDefault() {
  }

  public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases ) throws KettleException {
    try {
      List<StreamInterface> infoStreams = getStepIOMeta().getInfoStreams();
      StreamInterface headStream = infoStreams.get( 0 );
      StreamInterface tailStream = infoStreams.get( 1 );
      headStream.setSubject( rep.getStepAttributeString( id_step, "head_name" ) );
      tailStream.setSubject( rep.getStepAttributeString( id_step, "tail_name" ) );
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "AppendMeta.Exception.UnexpectedErrorReadingStepInfo" ), e );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
    try {
      List<StreamInterface> infoStreams = getStepIOMeta().getInfoStreams();
      StreamInterface headStream = infoStreams.get( 0 );
      StreamInterface tailStream = infoStreams.get( 1 );
      rep.saveStepAttribute( id_transformation, id_step, "head_name", headStream.getStepname() );
      rep.saveStepAttribute( id_transformation, id_step, "tail_name", tailStream.getStepname() );
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString( PKG, "AppendMeta.Exception.UnableToSaveStepInfo" )
        + id_step, e );
    }
  }

  @Override

View on GitHub (pinned to f3058517a1)