pentaho/pentaho-kettle · error · KettleException
JobFoldersCompare.Meta.UnableLoadRep
Error message
JobFoldersCompare.Meta.UnableLoadRep
What it means
Thrown by JobEntryFoldersCompare.loadRep when reading the entry's attributes (compareonly, wildcard, filename1, filename2) from the repository fails with a KettleException. The message is a localized bundle key formatted with the id_jobentry and the cause's message. It means the 'Compare Folders' entry could not be hydrated from the repository.
Solutions
- Inspect the wrapped dbe.getMessage() for the underlying repository/database error.
- Verify rows exist in r_jobentry_attribute for the given id_jobentry.
- Re-save the job entry from Spoon to recreate attribute rows.
- Check repository connectivity and re-open the job.
Example fix
// before
entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
// after
try {
entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
} catch (KettleException e) {
logError("FoldersCompare load failed for id_jobentry=" + idJobEntry + ": " + e.getMessage());
} Defensive patterns
Strategy: try-catch
Validate before calling
if (idJobEntry == null || rep.getJobEntryAttributeString(idJobEntry, "filename1") == null) {
logBasic("FoldersCompare entry attributes missing; will re-save entry");
} Try / catch
try {
entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
} catch (KettleException e) {
logError("Load failed for id_jobentry=" + idJobEntry + ": " + e.getMessage());
// recreate attribute rows via Spoon re-save
} Prevention
- Check repository integrity after migrations.
- Confirm attribute rows exist for entries loaded from older repositories.
- Monitor DB health before opening jobs.
- Keep repository backups for recovery.
When it happens
Trigger: Calling loadRep on JobEntryFoldersCompare when rep.getJobEntryAttributeString throws KettleException — repository DB error, missing r_jobentry_attribute rows for id_jobentry, or connection failure.
Common situations: Corrupt or partially deleted repository rows; repository unreachable when opening a job; entry saved under a different schema version; stale ObjectIds after a repository migration.
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
- JobEntryMSAccessBulkLoad.Meta.UnableSave
- JobEntrySimple.Error.Exception.UnableLoadRep
- JobFoldersCompare.Meta.UnableSaveRep
- JobMoveFiles.Error.Exception.UnableSaveRep
- JobXMLWellFormed.Error.Exception.UnableSaveRep + id_job
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/0fdaadfb9bb1696a.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/folderscompare/JobEntryFoldersCompare.java:155
} catch ( KettleXMLException xe ) {
throw new KettleXMLException( BaseMessages.getString( PKG, "JobFoldersCompare.Meta.UnableLoadXML", xe
.getMessage() ) );
}
}
public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
List<SlaveServer> slaveServers ) throws KettleException {
try {
includesubfolders = rep.getJobEntryAttributeBoolean( id_jobentry, "include_subfolders" );
comparefilecontent = rep.getJobEntryAttributeBoolean( id_jobentry, "compare_filecontent" );
comparefilesize = rep.getJobEntryAttributeBoolean( id_jobentry, "compare_filesize" );
compareonly = rep.getJobEntryAttributeString( id_jobentry, "compareonly" );
wildcard = rep.getJobEntryAttributeString( id_jobentry, "wildcard" );
filename1 = rep.getJobEntryAttributeString( id_jobentry, "filename1" );
filename2 = rep.getJobEntryAttributeString( id_jobentry, "filename2" );
} catch ( KettleException dbe ) {
throw new KettleException( BaseMessages.getString( PKG, "JobFoldersCompare.Meta.UnableLoadRep", ""
+ id_jobentry, dbe.getMessage() ) );
}
}
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
try {
rep.saveJobEntryAttribute( id_job, getObjectId(), "include_subfolders", includesubfolders );
rep.saveJobEntryAttribute( id_job, getObjectId(), "compare_filecontent", comparefilecontent );
rep.saveJobEntryAttribute( id_job, getObjectId(), "compare_filesize", comparefilesize );
rep.saveJobEntryAttribute( id_job, getObjectId(), "compareonly", compareonly );
rep.saveJobEntryAttribute( id_job, getObjectId(), "wildcard", wildcard );
rep.saveJobEntryAttribute( id_job, getObjectId(), "filename1", filename1 );
rep.saveJobEntryAttribute( id_job, getObjectId(), "filename2", filename2 );
} catch ( KettleDatabaseException dbe ) {
throw new KettleException( BaseMessages.getString(
PKG, "JobFoldersCompare.Meta.UnableSaveRep", "" + id_job, dbe.getMessage() ) );
}View on GitHub (pinned to f3058517a1)