pentaho/pentaho-kettle · error · KettleException
ExecProcessMeta.Exception.UnexpectedErrorReadingStepInfo
Error message
ExecProcessMeta.Exception.UnexpectedErrorReadingStepInfo
What it means
KettleException thrown by ExecProcessMeta.readRep() when an unexpected Exception occurs while reading the ExecProcess step's settings from the repository (e.g. counting/reading argumentFieldName attributes). It wraps the original exception so the step's metadata cannot be loaded from a repository. The library throws it as a catch-all around repository reads in readRep().
Solutions
- Inspect the wrapped cause exception (KettleException.getCause()) to find the real repository/JDBC error.
- Verify repository connectivity and re-test with a database health check.
- Re-save the affected transformation step in Spoon to rewrite its repository attributes.
- If repository schema is stale, run the repository upgrade/migration scripts matching your Pentaho version.
Example fix
// before: opaque failure
TransMeta tm = new TransMeta(rep, transName, directory);
// after: log the root cause
try {
TransMeta tm = new TransMeta(rep, transName, directory);
} catch (KettleException e) {
log.error("Step meta load failed", e.getCause());
} Defensive patterns
Strategy: try-catch
Validate before calling
if (rep == null || id_step == null) throw new IllegalArgumentException("repository and id_step required"); Try / catch
try { meta.readRep(rep, metaStore, id_step, databases); } catch (KettleException e) { log.error("step meta read failed: " + e.getCause(), e); } Prevention
- Keep repository database healthy and migrations current
- Always inspect getCause() on wrapped KettleExceptions
- Back up repository before upgrades
When it happens
Trigger: Calling readRep() on an ExecProcessMeta when Repository.countNrStepAttributes() or Repository.getStepAttributeString(id_step, i, "argumentFieldName") throws — corrupt repository rows, DB connection failure, or bad id_step.
Common situations: Repository database partially migrated or corrupted; transformation loaded from an incompatible repository schema version; transient JDBC connection drop while loading a transformation containing an Execute a process step.
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
- AppendMeta.Exception.UnexpectedErrorReadingStepInfo
- CombinationLookupMeta.Exception.UnexpectedErrorWhileReadingS…
- DynamicSQLRowMeta.Exception.UnexpectedErrorReadingStepInfo
- error reading step with id_step= from the repository
- ExecSQLRowMeta.Exception.UnexpectedErrorReadingStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/99ef987ed3d36b9d.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/execprocess/ExecProcessMeta.java:294
try {
processfield = rep.getStepAttributeString( id_step, "processfield" );
resultfieldname = rep.getStepAttributeString( id_step, "resultfieldname" );
errorfieldname = rep.getStepAttributeString( id_step, "errorfieldname" );
exitvaluefieldname = rep.getStepAttributeString( id_step, "exitvaluefieldname" );
failwhennotsuccess = rep.getStepAttributeBoolean( id_step, "failwhennotsuccess" );
outputLineDelimiter = rep.getStepAttributeString( id_step, "outputlinedelimiter" );
if ( outputLineDelimiter == null ) {
outputLineDelimiter = ""; // default to empty string for backward compatibility
}
argumentsInFields = rep.getStepAttributeBoolean( id_step, "argumentsInFields" );
int argCount = rep.countNrStepAttributes( id_step, "argumentFieldName" );
argumentFieldNames = new String[argCount];
for ( int i = 0; i < argCount; i++ ) {
argumentFieldNames[i] = rep.getStepAttributeString( id_step, i, "argumentFieldName" );
}
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString(
PKG, "ExecProcessMeta.Exception.UnexpectedErrorReadingStepInfo" ), e );
}
}
@Override
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
try {
rep.saveStepAttribute( id_transformation, id_step, "processfield", processfield );
rep.saveStepAttribute( id_transformation, id_step, "resultfieldname", resultfieldname );
rep.saveStepAttribute( id_transformation, id_step, "errorfieldname", errorfieldname );
rep.saveStepAttribute( id_transformation, id_step, "exitvaluefieldname", exitvaluefieldname );
rep.saveStepAttribute( id_transformation, id_step, "failwhennotsuccess", failwhennotsuccess );
rep.saveStepAttribute( id_transformation, id_step, "outputlinedelimiter", outputLineDelimiter );
rep.saveStepAttribute( id_transformation, id_step, "argumentsInFields", argumentsInFields );
for ( int i = 0; i < argumentFieldNames.length; i++ ) {
rep.saveStepAttribute( id_transformation, id_step, i, "argumentFieldName", argumentFieldNames[i] );
}
} catch ( Exception e ) {View on GitHub (pinned to f3058517a1)