pentaho/pentaho-kettle · error · KettleException

SalesforceUpdateMeta.Exception.ErrorReadingRepository

Error message

SalesforceUpdateMeta.Exception.ErrorReadingRepository

What it means

This KettleException wraps any failure that occurs while reading the Salesforce Update step's saved settings from the Pentaho repository (readRep). The repository (rep.getStepAttributeString/Boolean) is accessed inside a try/catch and any exception — repository down, bad ID, schema mismatch — is rethrown with this localized message and the original cause attached. It signals the step metadata could not be loaded, so the transformation cannot run.

Solutions

  1. Check the 'cause' chained exception for the real repository failure (connection refused, table missing, etc.) and fix that first.
  2. Verify the Pentaho repository connection (host, credentials, database) is reachable before opening the transformation.
  3. Confirm id_step and the transformation exist in the repository (rpartition/repository migration may have orphaned rows).
  4. If repository corruption is suspected, re-save the step/transformation or rebuild the repository metadata tables.

Example fix

// before
SalesforceUpdateMeta meta = (SalesforceUpdateMeta) stepMeta.getStepMetaInterface();
meta.readRep(repository, metaStore, stepMeta.getObjectId(), null);
// after
try {
  meta.readRep(repository, metaStore, stepMeta.getObjectId(), null);
} catch (KettleException e) {
  logError("Repository read failed for Salesforce Update step", e);
  if (!repository.connect()) throw e; // reattach/reconnect repository, then retry
}
Defensive patterns

Strategy: try-catch

Validate before calling

if (repository == null || !repository.isConnected()) throw new IllegalStateException("Repository not connected before readRep");

Try / catch

try { meta.readRep(rep, metaStore, idStep, null); } catch (KettleException e) { log.error("ErrorReadingRepository, cause: " + e.getCause(), e); throw e; }

Prevention

When it happens

Trigger: Calling readRep on SalesforceUpdateMeta when the underlying Repository getStepAttributeString/getStepAttributeBoolean calls throw — e.g. repository connection dropped mid-read, id_step not found in the repository, or repository schema/attribute tables inaccessible.

Common situations: Opening a transformation stored in a database repository whose connection has timed out; loading steps after a Pentaho repository upgrade that changed attribute storage; corrupt or partially migrated ktr metadata rows; running on a node with a misconfigured repository connection.

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

Appendix: source

Thrown at plugins/salesforce/core/src/main/java/org/pentaho/di/trans/steps/salesforceupdate/SalesforceUpdateMeta.java:266

  }

  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" ) );
      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, "SalesforceUpdateMeta.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() );

      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() );
    } catch ( Exception e ) {

View on GitHub (pinned to f3058517a1)