pentaho/pentaho-kettle · error · KettleException
JobEntryMSAccessBulkLoad.Meta.UnableLoadRep
JobEntryMSAccessBulkLoad.Meta.UnableLoadRep
Error message
JobEntryMSAccessBulkLoad.Meta.UnableLoadRep
What it means
KettleException thrown by JobEntryMSAccessBulkLoad.loadRep when reading the job entry's attributes from the Pentaho repository fails. The message embeds the job entry ObjectId and the database error message. The job entry cannot be loaded from the repository.
Solutions
- Test the repository connection and retry loading the job; transient DB issues are a common cause.
- Verify repository tables (r_jobentry_attribute) contain consistent rows for the reported id_jobentry; repair or re-save the job entry.
- Check PDI and repository schema versions match; run the repository upgrade scripts if the metadata was written by a different version.
- As a workaround, re-create the MS Access Bulk Load job entry and re-save the job to the repository.
Defensive patterns
Strategy: try-catch
Try / catch
try { entry.loadRep( rep, metaStore, id_jobentry, databases, slaveServers ); } catch ( KettleException e ) { logError( "Repository load failed for entry " + id_jobentry + ": " + e.getCause(), e ); } Prevention
- Verify repository connectivity before opening jobs
- Keep PDI and repository schema versions in sync
- Avoid concurrent edits of the same job entry in the repository
- Monitor repository DB health
When it happens
Trigger: loadRep(Repository, IMetaStore, ObjectId id_jobentry, ...) hitting a KettleDatabaseException: the repository rows for this job entry are missing/corrupt, the repository connection dropped mid-load, or attribute tables are incompatible.
Common situations: Repository database upgraded/downgraded between PDI versions so attribute schemas differ; broken network to the repository DB mid-session; partially deleted job entries (parent row deleted, attribute rows orphaned or vice versa); repository permissions problems.
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
- GPLoadMeta.Exception.UnexpectedErrorReadingStepInfoFromRepos…
- JobEntryCheckFilesLocked.UnableToLoadFromRepo
- JobEntryCheckFilesLocked.UnableToSaveToRepo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/5d6aa54e65d6fbef.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/ms-access/impl/src/main/java/org/pentaho/di/job/entries/msaccessbulkload/JobEntryMSAccessBulkLoad.java:232
// How many arguments?
int argnr = rep.countNrJobEntryAttributes( id_jobentry, "source_filefolder" );
source_filefolder = new String[argnr];
source_wildcard = new String[argnr];
delimiter = new String[argnr];
target_Db = new String[argnr];
target_table = new String[argnr];
// Read them all...
for ( int a = 0; a < argnr; a++ ) {
source_filefolder[a] = rep.getJobEntryAttributeString( id_jobentry, a, "source_filefolder" );
source_wildcard[a] = rep.getJobEntryAttributeString( id_jobentry, a, "source_wildcard" );
delimiter[a] = rep.getJobEntryAttributeString( id_jobentry, a, "delimiter" );
target_Db[a] = rep.getJobEntryAttributeString( id_jobentry, a, "target_db" );
target_table[a] = rep.getJobEntryAttributeString( id_jobentry, a, "target_table" );
}
} catch ( KettleException dbe ) {
throw new KettleException( BaseMessages.getString( PKG, "JobEntryMSAccessBulkLoad.Meta.UnableLoadRep", ""
+ id_jobentry, dbe.getMessage() ), dbe );
}
}
private void displayResults() {
if ( log.isDetailed() ) {
logDetailed( "=======================================" );
logDetailed( BaseMessages.getString( PKG, "JobEntryMSAccessBulkLoad.Log.Info.FilesToLoad", ""
+ NrFilesToProcess ) );
logDetailed( BaseMessages.getString( PKG, "JobEntryMSAccessBulkLoad.Log.Info.FilesLoaded", "" + NrSuccess ) );
logDetailed( BaseMessages.getString( PKG, "JobEntryMSAccessBulkLoad.Log.Info.NrErrors", "" + NrErrors ) );
logDetailed( "=======================================" );
}
}
public void setLimit( String limit ) {
this.limit = limit;
}View on GitHub (pinned to f3058517a1)