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
- Check the 'cause' chained exception for the real repository failure (connection refused, table missing, etc.) and fix that first.
- Verify the Pentaho repository connection (host, credentials, database) is reachable before opening the transformation.
- Confirm id_step and the transformation exist in the repository (rpartition/repository migration may have orphaned rows).
- 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
- Ensure the repository connection is alive before loading transformations
- Always inspect getCause() of repository-related KettleExceptions
- Keep repository plugin versions and PDI versions in sync
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
- SalesforceUpdateMeta.Exception.ErrorSavingToRepository
- SalesforceUpsertMeta.Exception.ErrorReadingRepository
- LDIFInputMeta.Exception.ErrorReadingRepository
- SalesforceInsertMeta.Exception.ErrorReadingRepository
- Unexpected error reading step information from the…
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)