pentaho/pentaho-kettle · error · KettleException

Unexpected error reading step information from the…

Error message

Unexpected error reading step information from the repository

What it means

MetaInjectMeta.readRep() rebuilds the target/source mapping from repository step attributes and then runs MetaInjectMigration. Any exception while reading attributes or migrating the mapping is wrapped in a KettleException with this message. It fails loading the transformation from the repository.

Solutions

  1. Inspect the wrapped cause to find whether attribute reads or MetaInjectMigration failed.
  2. Reopen and re-save the step in Spoon to rewrite its repository attributes.
  3. Verify repository database connectivity and integrity.
  4. Ensure the PDI client version matches the repository content version so migration runs correctly.
Defensive patterns

Strategy: try-catch

Validate before calling

// Before loading, confirm the step's attributes exist
ObjectId id_step = rep.getStepID(stepname, id_transformation);
int count = rep.countNrStepAttributes(id_step, MetaInjectMeta.MAPPING_TARGET_STEP);
if (count == 0) log.Warn("MetaInject step has no stored mappings");

Try / catch

try {
  meta.readRep(rep, metaStore, id_step, databases);
} catch (KettleException e) {
  logError("Repository read failed for step " + id_step + ": " + e.getCause(), e);
}

Prevention

When it happens

Trigger: readRep(rep, metaStore, id_step, databases) encountering repository I/O errors, missing step attributes for the Meta Inject step, or MetaInjectMigration throwing on legacy mapping rows.

Common situations: Corrupt or partially migrated repository rows after a PDI upgrade; database connectivity drops mid-load; repository records created by an incompatible older plugin version.

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

Appendix: source

Thrown at plugins/meta-inject/impl/src/main/java/org/pentaho/di/trans/steps/metainject/MetaInjectMeta.java:323

      targetFile = rep.getStepAttributeString( id_step, TARGET_FILE );
      noExecution = rep.getStepAttributeBoolean( id_step, NO_EXECUTION );

      int nrMappings = rep.countNrStepAttributes( id_step, MAPPING_TARGET_STEP_NAME );
      for ( int i = 0; i < nrMappings; i++ ) {
        String targetStepname = rep.getStepAttributeString( id_step, i, MAPPING_TARGET_STEP_NAME );
        String targetAttributeKey = rep.getStepAttributeString( id_step, i, MAPPING_TARGET_ATTRIBUTE_KEY );
        boolean targetDetail = rep.getStepAttributeBoolean( id_step, i, MAPPING_TARGET_DETAIL );
        String sourceStepname = rep.getStepAttributeString( id_step, i, MAPPING_SOURCE_STEP );
        String sourceField = rep.getStepAttributeString( id_step, i, MAPPING_SOURCE_FIELD );

        TargetStepAttribute target = new TargetStepAttribute( targetStepname, targetAttributeKey, targetDetail );
        SourceStepField source = new SourceStepField( sourceStepname, sourceField );
        targetSourceMapping.put( target, source );
      }

      MetaInjectMigration.migrate( targetSourceMapping );
    } catch ( Exception e ) {
      throw new KettleException( "Unexpected error reading step information from the repository", e );
    }
  }

  @Override
  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step )
    throws KettleException {
    try {
      rep.saveStepAttribute( id_transformation, id_step, SPECIFICATION_METHOD, specificationMethod == null ? null
        : specificationMethod.getCode() );
      rep.saveStepAttribute( id_transformation, id_step, TRANS_OBJECT_ID, transObjectId == null ? null : transObjectId
        .toString() );
      rep.saveStepAttribute( id_transformation, id_step, FILENAME, fileName );
      rep.saveStepAttribute( id_transformation, id_step, TRANS_NAME, transName );
      rep.saveStepAttribute( id_transformation, id_step, DIRECTORY_PATH, directoryPath );

      rep.saveStepAttribute( id_transformation, id_step, SOURCE_STEP, sourceStepName );
      rep.saveStepAttribute( id_transformation, id_step, STREAM_SOURCE_STEP, streamSourceStepname );
      rep.saveStepAttribute( id_transformation, id_step, STREAM_TARGET_STEP, streamTargetStepname );

View on GitHub (pinned to f3058517a1)