pentaho/pentaho-kettle · error · KettleException
JobEntryAddResultFilenames.UnableToLoadFromRepo
Error message
JobEntryAddResultFilenames.UnableToLoadFromRepo
What it means
loadRep throws KettleException with this message when reading the AddResultFilenames entry's arguments/filemasks from the repository database fails. It wraps the underlying KettleException (usually a KettleDatabaseException) and includes the job entry ObjectId for diagnosis.
Solutions
- Verify the repository database connection (test in the repository login dialog).
- Check R_JOBENTRY_ATTRIBUTE rows exist for the given id_jobentry; re-save the job entry if missing.
- Run the repository upgrade scripts if the Pentaho version changed.
Example fix
// before arguments[a] = rep.getJobEntryAttributeString( id_jobentry, a, "name" ); // after (defensive) String name = rep.getJobEntryAttributeString( id_jobentry, a, "name" ); arguments[a] = name != null ? name : "";
Defensive patterns
Strategy: try-catch
Validate before calling
// verify repository connectivity and entry existence before load if ( !rep.connect( username, password ) ) throw new IllegalStateException( "repo unreachable" ); ObjectId id = rep.getJobEntryObjectId( jobMeta, entryName ); if ( id == null ) throw new IllegalStateException( "job entry missing in repository" );
Try / catch
try { entry.loadRep( rep, metaStore, id_jobentry, databases, slaveServers ); } catch ( KettleException e ) { logError( "repo load failed for " + id_jobentry + ": " + e.getMessage(), e ); } Prevention
- Test the repository connection before batch-loading jobs.
- Keep repository schema upgraded to match PDI version.
- Avoid deleting shared job entries while others load them.
When it happens
Trigger: rep.getJobEntryAttributeString(id_jobentry, a, "name"/"filemask") throwing because the repository connection is down, the job entry row was deleted, or a schema mismatch exists.
Common situations: Repository database unreachable, entries deleted by another user mid-load, upgraded repository schema missing R_JOBENTRY_ATTRIBUTE rows.
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
- JobEntryAbort.UnableToLoadFromRepo.Label
- JobEntryAbort.UnableToSaveToRepo.Label
- JobEntryConnectedToRepository.Meta.UnableToLoadFromRep
- JobEntryConnectedToRepository.Meta.UnableToSaveToRep
- JobEntryMailValidator.Meta.UnableToSaveToRep
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/4142ae7b74fb1a82.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/core/impl/src/main/java/org/pentaho/di/job/entries/addresultfilenames/JobEntryAddResultFilenames.java:171
List<SlaveServer> slaveServers ) throws KettleException {
try {
argFromPrevious = rep.getJobEntryAttributeBoolean( id_jobentry, "arg_from_previous" );
includeSubfolders = rep.getJobEntryAttributeBoolean( id_jobentry, "include_subfolders" );
deleteallbefore = rep.getJobEntryAttributeBoolean( id_jobentry, "delete_all_before" );
// How many arguments?
int argnr = rep.countNrJobEntryAttributes( id_jobentry, "name" );
arguments = new String[argnr];
filemasks = new String[argnr];
// Read them all...
for ( int a = 0; a < argnr; a++ ) {
arguments[a] = rep.getJobEntryAttributeString( id_jobentry, a, "name" );
filemasks[a] = rep.getJobEntryAttributeString( id_jobentry, a, "filemask" );
}
} catch ( KettleException dbe ) {
throw new KettleException( BaseMessages.getString(
PKG, "JobEntryAddResultFilenames.UnableToLoadFromRepo", String.valueOf( id_jobentry ) ), dbe );
}
}
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
try {
rep.saveJobEntryAttribute( id_job, getObjectId(), "arg_from_previous", argFromPrevious );
rep.saveJobEntryAttribute( id_job, getObjectId(), "include_subfolders", includeSubfolders );
rep.saveJobEntryAttribute( id_job, getObjectId(), "delete_all_before", deleteallbefore );
// save the arguments...
if ( arguments != null ) {
for ( int i = 0; i < arguments.length; i++ ) {
rep.saveJobEntryAttribute( id_job, getObjectId(), i, "name", arguments[i] );
rep.saveJobEntryAttribute( id_job, getObjectId(), i, "filemask", filemasks[i] );
}
}
} catch ( KettleDatabaseException dbe ) {View on GitHub (pinned to f3058517a1)