pentaho/pentaho-kettle · error · KettleException

DeleteMeta.Exception.UnexpectedErrorInReadingStepInfo

DeleteMeta.Exception.UnexpectedErrorInReadingStepInfo

Error message

DeleteMeta.Exception.UnexpectedErrorInReadingStepInfo

What it means

DeleteMeta.readRep loads the step configuration from a repository (database). Any exception while reading step attributes (key stream/lookup/condition/name2 per key field) is wrapped in a KettleException with this generic message plus the root cause. It means the Delete step's metadata could not be loaded from the repository.

Solutions

  1. Check the cause of the KettleException for the repository-level error (connectivity, SQL, missing table).
  2. Verify the repository connection and that the repository schema version matches your Pentaho version (run the repository upgrade tool if needed).
  3. Re-save the transformation/step from Spoon to repopulate the repository attributes.
  4. If only one transformation fails, recreate the Delete step in that transformation.

Example fix

// before
rep connection pointing at r_schema v5 while running Pentaho v9
// after
run repository upgrade scripts so r_step_attribute matches the current Pentaho version
Defensive patterns

Strategy: try-catch

Validate before calling

// Before loading: check repository reachability
if (!repository.connect(username, password).isEmpty()) { throw new IllegalStateException("repo unavailable"); }

Try / catch

try { transMeta.loadFromRepository(dir, monitor, null); } catch (KettleException e) {
  log.error("Repository read failed for step {}: {}", stepId, e.getCause(), e);
}

Prevention

When it happens

Trigger: readRep calls rep.getStepAttributeString(...) for key fields and any underlying repository exception (connection failure, missing rows, schema mismatch) occurs; caught and rethrown as KettleException.

Common situations: Repository database unavailable or schema not upgraded after a Pentaho version change; orphaned step rows; network drop mid-load; loading a transformation whose step attributes were partially deleted.

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/4aa1c590d00c000e. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/delete/DeleteMeta.java:311

        if ( comSz >= 0 ) {
          commitSize = Long.toString( comSz );
        }
      }
      schemaName = rep.getStepAttributeString( id_step, TAG_SCHEMA );
      tableName = rep.getStepAttributeString( id_step, TAG_TABLE );

      int nrkeys = rep.countNrStepAttributes( id_step, TAG_KEY_FIELD );

      allocate( nrkeys );

      for ( int i = 0; i < nrkeys; i++ ) {
        keyFields[i].setKeyStream( rep.getStepAttributeString( id_step, i, TAG_KEY_NAME ) );
        keyFields[i].setKeyLookup( rep.getStepAttributeString( id_step, i, TAG_KEY_FIELD ) );
        keyFields[i].setKeyCondition( rep.getStepAttributeString( id_step, i, TAG_KEY_CONDITION ) );
        keyFields[i].setKeyStream2( rep.getStepAttributeString( id_step, i, TAG_KEY_NAME2 ) );
      }
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString(
              PKG, "DeleteMeta.Exception.UnexpectedErrorInReadingStepInfo" ), e );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
    try {
      rep.saveDatabaseMetaStepAttribute( id_transformation, id_step, TAG_ID_CONNECTION, databaseMeta );
      rep.saveStepAttribute( id_transformation, id_step, TAG_COMMIT, commitSize );
      rep.saveStepAttribute( id_transformation, id_step, TAG_SCHEMA, schemaName );
      rep.saveStepAttribute( id_transformation, id_step, TAG_TABLE, tableName );

      for ( int i = 0; i < keyFields.length; i++ ) {
        rep.saveStepAttribute( id_transformation, id_step, i, TAG_KEY_NAME, keyFields[i].getKeyStream() );
        rep.saveStepAttribute( id_transformation, id_step, i, TAG_KEY_FIELD, keyFields[i].getKeyLookup() );
        rep.saveStepAttribute( id_transformation, id_step, i, TAG_KEY_CONDITION, keyFields[i].getKeyCondition() );
        rep.saveStepAttribute( id_transformation, id_step, i, TAG_KEY_NAME2, keyFields[i].getKeyStream2() );
      }

View on GitHub (pinned to f3058517a1)