pentaho/pentaho-kettle · error · KettleException
DetectLastRowMeta.Exception.UnexpectedErrorReadingStepInfo
DetectLastRowMeta.Exception.UnexpectedErrorReadingStepInfo
Error message
DetectLastRowMeta.Exception.UnexpectedErrorReadingStepInfo
What it means
DetectLastRowMeta.readRep wraps any exception while reading the step's attributes from a Kettle repository into a generic KettleException with this localized message. It indicates the repository read of resultfieldname (or other attributes) failed unexpectedly, with the cause chained.
Solutions
- Inspect the chained cause for the underlying repository/database error
- Verify repository connectivity and credentials
- Check that the step row and its attribute rows exist in the repository
- Re-create the step in Spoon and re-save if repository data is corrupted
Example fix
// before
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString( PKG, "DetectLastRowMeta.Exception.UnexpectedErrorReadingStepInfo" ), e );
}
// after: log cause for diagnosis
} catch ( Exception e ) {
logError( "Repository read failed for DetectLastRow step " + id_step, e );
throw new KettleException( BaseMessages.getString( PKG, "DetectLastRowMeta.Exception.UnexpectedErrorReadingStepInfo" ), e );
} Defensive patterns
Strategy: try-catch
Validate before calling
// before loading from repository, verify connection
if ( repository == null || !repository.isConnected() ) {
throw new KettleException("Repository not connected; cannot load transformation");
} Try / catch
try {
transMeta = TransMetaFactory.loadTransformation(rep, path, metaStore, true, variables);
} catch (KettleException e) {
if (e.getMessage() != null && e.getMessage().contains("UnexpectedErrorReadingStepInfo")) {
log.error("Repository read failed for DetectLastRow step; cause: " + e.getCause(), e);
}
throw e;
} Prevention
- Check repository health/permissions before loading
- Keep client and repository schema versions aligned
- Back up r_step_attribute data before repository maintenance
- Always log getCause() for the underlying error
When it happens
Trigger: Loading a transformation from a repository (StepMeta repository load path calls readRep) when rep.getStepAttributeString throws: repository connection failure, missing step row, or repository plugin error.
Common situations: Repository database unreachable during load; r_step_attribute rows missing or corrupted for the step; permission issues on repository tables; version mismatch between client and repository schema.
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
- CubeInputMeta.Exception.UnableToSaveStepInfo
- CubeOutputMeta.Exception.UnableToSaveStepInfo
- CubeOutputMeta.Exception.UnexpectedErrorInReadingStepInfo
- DelayMeta.Exception.UnexpectedErrorReadingStepInfo
- DelayMeta.Exception.UnexpectedErrorSavingStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/f209ee9495e4d75e.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/detectlastrow/DetectLastRowMeta.java:116
StringBuilder retval = new StringBuilder();
retval.append( " " + XMLHandler.addTagValue( "resultfieldname", resultfieldname ) );
return retval.toString();
}
private void readData( Node stepnode ) throws KettleXMLException {
try {
resultfieldname = XMLHandler.getTagValue( stepnode, "resultfieldname" );
} catch ( Exception e ) {
throw new KettleXMLException( BaseMessages.getString(
PKG, "DetectLastRowMeta.Exception.UnableToReadStepInfo" ), e );
}
}
public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases ) throws KettleException {
try {
resultfieldname = rep.getStepAttributeString( id_step, "resultfieldname" );
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString(
PKG, "DetectLastRowMeta.Exception.UnexpectedErrorReadingStepInfo" ), e );
}
}
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
try {
rep.saveStepAttribute( id_transformation, id_step, "resultfieldname", resultfieldname );
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString( PKG, "DetectLastRowMeta.Exception.UnableToSaveStepInfo" )
+ id_step, e );
}
}
public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepMeta,
RowMetaInterface prev, String[] input, String[] output, RowMetaInterface info, VariableSpace space,
Repository repository, IMetaStore metaStore ) {
CheckResult cr;
String error_message = "";View on GitHub (pinned to f3058517a1)