pentaho/pentaho-kettle · error · KettleException
GPLoadMeta.Exception.UnexpectedErrorReadingStepInfoFromRepos…
Error message
GPLoadMeta.Exception.UnexpectedErrorReadingStepInfoFromRepository
What it means
GPLoadMeta.readRep() loads step settings from the repository database; any exception is wrapped in a KettleException with this message. It signals a failure while reading GPload attributes (connection, table, field names, masks, match/update columns) for the given step id.
Solutions
- Verify repository connectivity and retry the transformation load
- Check repository schema version and run the repository upgrade/repair tools
- Inspect the wrapped cause (e.getCause()) for the underlying SQL/repository error
- Delete and re-create the step (re-save its settings) if its repository rows are corrupt
Example fix
// before // step attributes partially missing in repository for id_step // after // re-open the step in Spoon, re-enter GPload settings, and Save to repopulate attributes
Defensive patterns
Strategy: try-catch
Validate before calling
// before reading: confirm repository reachable and step id has attributes
if (rep == null || !rep.isConnected()) throw new IllegalStateException("Repository not connected");
List<Object[]> attrs = rep.getStepAttributes(id_step); // pseudo-check; fail fast if empty/corrupt Try / catch
try { loadTransFromRepository(...) } catch (KettleException e) {
if (e.getMessage().contains("UnexpectedErrorReadingStepInfoFromRepository")) {
logError("Repository read failed for step " + id_step + ": " + e.getCause());
}
throw e;
} Prevention
- Keep the repository database reachable and monitored during PDI runs
- Run repository upgrade scripts after PDI version changes
- Back up R_STEP_ATTRIBUTE rows before bulk edits
- Use a repository user with sufficient read privileges
When it happens
Trigger: Repository calls inside readRep (getStepAttributeString/getStepAttributeBoolean) throw — repository connection lost mid-read, schema mismatch in R_STEP_ATTRIBUTE, or corrupted/missing rows for id_step.
Common situations: Repository database unavailable or restarted during load; repository schema version older than the plugin expects; rows deleted or corrupted in the repository tables; permissions issues reading step attributes.
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
- ElasticSearchBulkMeta.Exception.ErrorReadingRepository
- ElasticSearchBulkMeta.Exception.ErrorSavingToRepository
- JobEntryMSAccessBulkLoad.Meta.UnableLoadRep
- JsonInputMeta.Exception.ErrorReadingRepository
- LDIFInputMeta.Exception.ErrorReadingRepository
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/be7bff661f98fbfb.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/gpload/core/src/main/java/org/pentaho/di/trans/steps/gpload/GPLoadMeta.java:493
int numberOfLocalHosts = rep.countNrStepAttributes( id_step, "local_host" );
allocateLocalHosts( numberOfLocalHosts );
for ( int i = 0; i < numberOfLocalHosts; i++ ) {
localHosts[i] = rep.getStepAttributeString( id_step, i, "local_host" );
}
int nrvalues = rep.countNrStepAttributes( id_step, "stream_name" );
allocate( nrvalues );
for ( int i = 0; i < nrvalues; i++ ) {
fieldTable[i] = rep.getStepAttributeString( id_step, i, "stream_name" );
fieldStream[i] = rep.getStepAttributeString( id_step, i, "field_name" );
dateMask[i] = rep.getStepAttributeString( id_step, i, "date_mask" );
matchColumn[i] = rep.getStepAttributeBoolean( id_step, i, "match_column" );
updateColumn[i] = rep.getStepAttributeBoolean( id_step, i, "update_column" );
}
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString( PKG,
"GPLoadMeta.Exception.UnexpectedErrorReadingStepInfoFromRepository" ), e );
}
}
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step )
throws KettleException {
try {
rep.saveDatabaseMetaStepAttribute( id_transformation, id_step, "id_connection", databaseMeta );
rep.saveStepAttribute( id_transformation, id_step, "errors", maxErrors );
rep.saveStepAttribute( id_transformation, id_step, "schema", schemaName );
rep.saveStepAttribute( id_transformation, id_step, "table", tableName );
rep.saveStepAttribute( id_transformation, id_step, "error_table", errorTableName );
rep.saveStepAttribute( id_transformation, id_step, "load_method", loadMethod );
rep.saveStepAttribute( id_transformation, id_step, "load_action", loadAction );
rep.saveStepAttribute( id_transformation, id_step, "gpload_path", gploadPath );
rep.saveStepAttribute( id_transformation, id_step, "control_file", controlFile );
rep.saveStepAttribute( id_transformation, id_step, "data_file", dataFile );
rep.saveStepAttribute( id_transformation, id_step, "delimiter", delimiter );View on GitHub (pinned to f3058517a1)