pentaho/pentaho-kettle · error · KettleException
GPBulkLoaderMeta.Exception.UnexpectedErrorReadingStepInfoFro…
Error message
GPBulkLoaderMeta.Exception.UnexpectedErrorReadingStepInfoFromRepository
What it means
Thrown by GPBulkLoaderMeta.readRep when an unexpected exception occurs while loading the step's settings from the Kettle repository. The step metadata (stream names, field names, date masks) is read via repository attributes inside a try/catch; any repository I/O or parsing failure is wrapped in this generic KettleException. The original exception is chained as the cause.
Solutions
- Check the chained cause (getCause()) to find the actual repository error and fix that first
- Verify the repository connection is alive and the user has read permission on the step attribute tables
- Re-save the transformation from Spoon to rebuild the step attribute rows
- Reconnect/restart the repository and retry loading the transformation
Defensive patterns
Strategy: try-catch
Validate before calling
// before loading if ( !rep.isConnected() ) throw new IllegalStateException( "Repository not connected" );
Type guard
boolean canRead = rep != null && rep.isConnected();
Try / catch
try { meta.readRep( rep, metaStore, id_step, databases ); } catch ( KettleException e ) { log.error( "Step info read failed; cause=" + e.getCause(), e ); } Prevention
- Always inspect getCause() — this error wraps the real repository failure
- Keep repository connections healthy and re-login after idle timeouts
- Avoid manual edits to repository attribute tables
- Back up transformations before repository migrations
When it happens
Trigger: Calling readRep (during transformation load from repository) when the repository connection drops mid-read, the step attribute rows are corrupted/missing, or the underlying Repository implementation throws (e.g. database repository outage, permission denied on r_step_attribute rows).
Common situations: Shared DB repository temporarily unavailable; r_step_attribute rows deleted manually or corrupted after a failed migration; stale repository cache after a server restart; repository user lacking SELECT rights.
Understand the failure class
Background: "failed to read file", EACCES, ENOENT and "could not read <path>" errors: when a program can't read a file from disk — this error's family across 49 libraries.
Related errors
- GetTableNamesMeta.Exception.UnableToSaveStepInfo
- GPBulkLoaderMeta.Exception.UnexpectedErrorReadingStepInfoFromRepository
- GPBulkLoaderMeta.Exception.UnableToSaveStepInfoToRepository
- InsertUpdateMeta.Exception.UnexpectedErrorReadingStepInfoFro…
- LucidDBStreamingLoaderMeta.Exception.UnexpectedErrorReadingStepInfoFromRepository
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/68792abaa1499946.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/gp-bulk-loader/core/src/main/java/org/pentaho/di/trans/steps/gpbulkloader/GPBulkLoaderMeta.java:377
controlFile = rep.getStepAttributeString( id_step, "control_file" );
dataFile = rep.getStepAttributeString( id_step, "data_file" );
logFile = rep.getStepAttributeString( id_step, "log_file" );
eraseFiles = rep.getStepAttributeBoolean( id_step, "erase_files" );
encoding = rep.getStepAttributeString( id_step, "encoding" );
dbNameOverride = rep.getStepAttributeString( id_step, "dbname_override" );
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" );
}
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString(
PKG, "GPBulkLoaderMeta.Exception.UnexpectedErrorReadingStepInfoFromRepository" ), e );
}
}
@Override
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, "load_method", loadMethod );
rep.saveStepAttribute( id_transformation, id_step, "load_action", loadAction );
rep.saveStepAttribute( id_transformation, id_step, "PsqlPath", PsqlPath );
rep.saveStepAttribute( id_transformation, id_step, "control_file", controlFile );
rep.saveStepAttribute( id_transformation, id_step, "data_file", dataFile );
rep.saveStepAttribute( id_transformation, id_step, "log_file", logFile );View on GitHub (pinned to f3058517a1)