pentaho/pentaho-kettle · error · KettleException
JobEntryDelay.UnableToLoadFromRepo.Label
Error message
JobEntryDelay.UnableToLoadFromRepo.Label
What it means
JobEntryDelay.loadRep throws this localized KettleException when the repository throws KettleDatabaseException while reading the delay entry's attributes (maximumTimeout, scaletime) for the given id_jobentry. The database error is chained as the cause. It means the delay job entry's repository metadata is unreadable.
Solutions
- Check the chained KettleDatabaseException for the true SQL error
- Confirm the attribute rows exist for the id_jobentry in the repository
- Re-save the Delay entry from Spoon to repopulate attributes
- Repair/upgrade the repository schema to match your Kettle version
Example fix
// before
entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
// after
try {
entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
} catch (KettleException e) {
logError("Delay load failed (cause=" + e.getCause() + ") for id_jobentry=" + idJobEntry);
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().startsWith("JobEntryDelay.UnableToLoadFromRepo");
} Try / catch
try {
entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
} catch (KettleException e) {
log.error("JobEntryDelay load failed (id_jobentry=" + idJobEntry + ")", e.getCause());
if (e.getCause() instanceof KettleDatabaseException) {
// verify repository connectivity and attribute rows, then retry
}
throw e;
} Prevention
- Check repository health before opening jobs
- Resolve the localized message key against messages.properties for diagnostics
- Keep repository schema in sync with Pentaho version
- Always inspect the chained database cause
When it happens
Trigger: loadRep called against a repository whose getJobEntryAttributeString/getJobEntryAttributeInteger throws — missing attribute rows for id_jobentry, broken repository connection, or corrupt/inaccessible r_jobentry_attribute table.
Common situations: Repository migration/restoration lost attribute rows; DB connectivity issues; repository schema not upgraded after Pentaho version change.
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/89b6ef4ad8a8c7ee.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/delay/JobEntryDelay.java:100
public void loadXML( Node entrynode, List<DatabaseMeta> databases, List<SlaveServer> slaveServers,
Repository rep, IMetaStore metaStore ) throws KettleXMLException {
try {
super.loadXML( entrynode, databases, slaveServers );
maximumTimeout = XMLHandler.getTagValue( entrynode, "maximumTimeout" );
scaleTime = Integer.parseInt( XMLHandler.getTagValue( entrynode, "scaletime" ) );
} catch ( Exception e ) {
throw new KettleXMLException( BaseMessages.getString( PKG, "JobEntryDelay.UnableToLoadFromXml.Label" ), e );
}
}
@Override
public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
List<SlaveServer> slaveServers ) throws KettleException {
try {
maximumTimeout = rep.getJobEntryAttributeString( id_jobentry, "maximumTimeout" );
scaleTime = (int) rep.getJobEntryAttributeInteger( id_jobentry, "scaletime" );
} catch ( KettleDatabaseException dbe ) {
throw new KettleException( BaseMessages.getString( PKG, "JobEntryDelay.UnableToLoadFromRepo.Label" )
+ id_jobentry, dbe );
}
}
//
// Save the attributes of this job entry
//
@Override
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
try {
rep.saveJobEntryAttribute( id_job, getObjectId(), "maximumTimeout", maximumTimeout );
rep.saveJobEntryAttribute( id_job, getObjectId(), "scaletime", scaleTime );
} catch ( KettleDatabaseException dbe ) {
throw new KettleException(
BaseMessages.getString( PKG, "JobEntryDelay.UnableToSaveToRepo.Label" ) + id_job, dbe );
}
}
View on GitHub (pinned to f3058517a1)