pentaho/pentaho-kettle · error · KettleException

SalesforceInsertMeta.Exception.ErrorReadingRepository

Error message

SalesforceInsertMeta.Exception.ErrorReadingRepository

What it means

SalesforceInsertMeta.readRep() loads the step's settings from the Kettle repository (database) instead of XML. Any exception while reading step attributes — repository connectivity, missing row, schema mismatch — is rethrown as a KettleException with the localized message key 'SalesforceInsertMeta.Exception.ErrorReadingRepository'. The real cause is chained.

Solutions

  1. Inspect the chained cause to see whether it is a database connection, SQL, or missing-row error.
  2. Verify the Kettle repository database is reachable and its schema (r_step_attribute etc.) matches the PDI version.
  3. Re-open the transformation in Spoon to confirm the step row still exists; re-save the step to regenerate its attributes.
  4. If the repository is corrupted, restore from backup or re-create the transformation in a fresh repository.
Defensive patterns

Strategy: try-catch

Validate before calling

// Verify repository connectivity before loading metadata
try (Connection c = repoDataSource.getConnection()) {
  if (!c.isValid(5)) throw new IllegalStateException("Repository DB unreachable");
}

Try / catch

try {
  TransMeta tm = repository.loadTransformation(transObjectId, null);
} catch (KettleException e) {
  Throwable cause = e.getCause();
  if (cause instanceof SQLException) {
    // handle repository DB problem: check connectivity/schema
  }
  throw e;
}

Prevention

When it happens

Trigger: Loading a Salesforce Insert step's metadata via Repository (loadTransMeta / StepMeta from repository) when rep.getStepAttributeString/Boolean throws: repository database down, KETTLE_* tables missing or out of schema, or the id_step no longer exists.

Common situations: Repository database upgraded/migrated with stale r_step_attribute schema; transformation deleted by another user while being loaded; network interruption to the repository DB; corrupted repository row for the 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/c92932e96ec2045f. Report an issue: GitHub.

Appendix: source

Thrown at plugins/salesforce/core/src/main/java/org/pentaho/di/trans/steps/salesforceinsert/SalesforceInsertMeta.java:289

  }

  public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases ) throws KettleException {
    super.readRep( rep, metaStore, id_step, databases );
    try {
      setBatchSize( rep.getStepAttributeString( id_step, "batchSize" ) );
      setSalesforceIDFieldName( rep.getStepAttributeString( id_step, "salesforceIDFieldName" ) );
      int nrFields = rep.countNrStepAttributes( id_step, "field_name" );
      allocate( nrFields );

      for ( int i = 0; i < nrFields; i++ ) {
        updateLookup[i] = rep.getStepAttributeString( id_step, i, "field_name" );
        updateStream[i] = rep.getStepAttributeString( id_step, i, "field_attribut" );
        useExternalId[i] =
          Boolean.valueOf( rep.getStepAttributeBoolean( id_step, i, "field_useExternalId", false ) );
      }
      setRollbackAllChangesOnError( rep.getStepAttributeBoolean( id_step, "rollbackAllChangesOnError" ) );
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "SalesforceInsertMeta.Exception.ErrorReadingRepository" ), e );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
    super.saveRep( rep, metaStore, id_transformation, id_step );
    try {
      rep.saveStepAttribute( id_transformation, id_step, "batchSize", getBatchSize() );
      rep.saveStepAttribute( id_transformation, id_step, "salesforceIDFieldName", getSalesforceIDFieldName() );

      for ( int i = 0; i < updateLookup.length; i++ ) {
        rep.saveStepAttribute( id_transformation, id_step, i, "field_name", getUpdateLookup()[i] );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_attribut", getUpdateStream()[i] );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_useExternalId", getUseExternalId()[i]
          .booleanValue() );

      }
      rep.saveStepAttribute( id_transformation, id_step, "rollbackAllChangesOnError", isRollbackAllChangesOnError() );

View on GitHub (pinned to f3058517a1)