pentaho/pentaho-kettle · error · KettleException
JobEntryDelay.UnableToSaveToRepo.Label
Error message
JobEntryDelay.UnableToSaveToRepo.Label
What it means
JobEntryDelay.saveRep throws this localized KettleException when the repository throws KettleDatabaseException while saving maximumTimeout and scaletime attributes for id_job. The cause is chained for diagnosis. It means the Delay entry's configuration was not persisted.
Solutions
- Inspect e.getCause() (KettleDatabaseException) for the SQL failure
- Verify repository write privileges and database health
- Ensure the entry belongs to a persisted job with a valid ObjectId
- Retry the save once connectivity is restored
Example fix
// before
entry.saveRep(rep, metaStore, idJob);
// after
try {
entry.saveRep(rep, metaStore, idJob);
} catch (KettleException e) {
logError("Delay save failed: " + (e.getCause() != null ? e.getCause().getMessage() : e.getMessage()));
throw e;
} Defensive patterns
Strategy: try-catch
Validate before calling
// before saveRep
if (rep.isReadOnly()) throw new IllegalStateException("Repository is read-only");
if (entry.getObjectId() == null) throw new IllegalStateException("Entry must be assigned a valid ObjectId before save"); Try / catch
try {
entry.saveRep(rep, metaStore, idJob);
} catch (KettleException e) {
log.error("JobEntryDelay save failed (id_job=" + idJob + ")", e.getCause());
if (e.getCause() instanceof KettleDatabaseException) {
// check privileges/disk/connection, then retry
}
throw e;
} Prevention
- Use repository accounts with write access
- Ensure entries belong to a persisted job before saveRep
- Add retry with backoff for transient DB failures
- Monitor repository DB health
When it happens
Trigger: saveRep called when saveJobEntryAttribute fails — repository write failure, constraint/privilege violation, null or invalid ObjectId on the job entry, or repository connection lost during save.
Common situations: Read-only repository credentials; DB out of disk or under lock; saving an in-memory-only entry with null ObjectId; transient DB outage mid-save.
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/9c1d881bd78d44ab.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/delay/JobEntryDelay.java:114
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 );
}
}
/**
* Execute this job entry and return the result. In this case it means, just set the result boolean in the Result
* class.
*
* @param previousResult
* The result of the previous execution
* @return The Result of the execution.
*/
@Override
public Result execute( Result previousResult, int nr ) {
Result result = previousResult;
result.setResult( false );
int multiple;
String waitScale;View on GitHub (pinned to f3058517a1)