pentaho/pentaho-kettle · error · KettleException
JobEntryDeleteFiles.UnableToLoadFromRepo
Error message
JobEntryDeleteFiles.UnableToLoadFromRepo
What it means
JobEntryDeleteFiles.loadRep throws this KettleException when the repository throws KettleException while reading the entry's per-row 'name' and 'filemask' attributes (numberOfArgs rows) for id_jobentry. The database error is chained and the id_jobentry is embedded in the localized message. It means the wildcard-delete entry's repository state is unreadable.
Solutions
- Inspect the chained KettleException for the database error
- Verify the nr-indexed rows (name/filemask) exist for the id_jobentry
- Re-save the Delete files entry in Spoon to rewrite its rows
- Check repository schema/version alignment and repair if needed
Example fix
// before
entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
// after
try {
entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
} catch (KettleException e) {
logError("DeleteFiles load failed for id=" + idJobEntry + ": " + (e.getCause() != null ? e.getCause().getMessage() : e.getMessage()));
throw e;
} Defensive patterns
Strategy: try-catch
Validate before calling
// before loadRep
if (id_jobentry == null) throw new IllegalArgumentException("id_jobentry required");
if (!rep.isConnected()) throw new IllegalStateException("Repository not connected"); Type guard
boolean isRepoLoadFailure(KettleException e) {
return e.getMessage() != null && e.getMessage().contains("UnableToLoadFromRepo");
} Try / catch
try {
entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
} catch (KettleException e) {
log.error("JobEntryDeleteFiles repo load failed for id=" + idJobEntry, e.getCause());
if (e.getCause() instanceof KettleDatabaseException) {
// verify nr-indexed name/filemask rows exist, re-save entry, retry
}
throw e;
} Prevention
- Verify row-count attributes match stored rows after repository migrations
- Keep repository schema aligned with Pentaho version
- Always inspect the chained database cause
- Back up repository before upgrades
When it happens
Trigger: loadRep when getJobEntryAttributeString(id_jobentry, i, ...) throws — the nr-indexed attribute rows are missing, the row count stored disagrees with the rows present, or the repository connection fails.
Common situations: Repository restore lost per-row attribute rows; version mismatch changing row-count handling; corrupt repository table; DB connectivity drop mid-load.
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
- AddSequenceMeta.Exception.UnableToSaveStepInfo
- ColumnExistsMeta.Exception.UnableToSaveStepInfo
- ColumnExistsMeta.Exception.UnexpectedErrorReadingStepInfo
- CreditCardValidatorMeta.Exception.UnableToSaveStepInfo
- CubeInputMeta.Exception.UnableToSaveStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/4b7dbe812e126180.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/deletefiles/JobEntryDeleteFiles.java:172
throw new KettleXMLException( BaseMessages.getString( PKG, "JobEntryDeleteFiles.UnableToLoadFromXml" ), xe );
}
}
public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
List<SlaveServer> slaveServers ) throws KettleException {
try {
argFromPrevious = rep.getJobEntryAttributeBoolean( id_jobentry, "arg_from_previous" );
includeSubfolders = rep.getJobEntryAttributeBoolean( id_jobentry, "include_subfolders" );
int numberOfArgs = rep.countNrJobEntryAttributes( id_jobentry, "name" );
allocate( numberOfArgs );
for ( int i = 0; i < numberOfArgs; i++ ) {
arguments[i] = rep.getJobEntryAttributeString( id_jobentry, i, "name" );
filemasks[i] = rep.getJobEntryAttributeString( id_jobentry, i, "filemask" );
}
} catch ( KettleException dbe ) {
throw new KettleException( BaseMessages.getString( PKG, "JobEntryDeleteFiles.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 );
// 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 ) {
throw new KettleException( BaseMessages.getString( PKG, "JobEntryDeleteFiles.UnableToSaveToRepo", StringView on GitHub (pinned to f3058517a1)