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
- Verify repository database connectivity and retry opening the transformation.
- Check r_step_attribute rows for the step's id_step; re-save the transformation from Spoon.
- Confirm the repository schema matches your Pentaho version (run repository upgrade scripts).
- 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
- Reconnect the repository after long-running sessions.
- Run repository upgrade scripts after Pentaho version upgrades.
- Back up the repository database regularly.
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
- CombinationLookupMeta.Exception.UnexpectedErrorWhileReadingS…
- NormaliserMeta.Exception.UnexpectedErrorReadingStepInfoFromRepository
- NullIfMeta.Exception.UnexpectedErrorReadingStepInfoFromRepos…
- AccessInputMeta.Exception.ErrorReadingRepository
- AddSequenceMeta.Exception.UnableToReadStepInfo
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 );
}
}
@OverrideView on GitHub (pinned to f3058517a1)