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

  1. Inspect the wrapped cause exception (KettleException.getCause()) to find the real repository/JDBC error.
  2. Verify repository connectivity and re-test with a database health check.
  3. Re-save the affected transformation step in Spoon to rewrite its repository attributes.
  4. 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

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


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)