pentaho/pentaho-kettle · error · KettleException
Unable to save job entry of type 'special' to the…
Error message
Unable to save job entry of type 'special' to the repository with id_job=
What it means
KettleException thrown by JobEntrySpecial.saveRep when persisting the 'special' job entry's schedule attributes (intervalMinutes, hour, minutes, weekDay, dayOfMonth) to the repository fails with a KettleDatabaseException. The message includes id_job so the failed save can be traced back to the specific job.
Solutions
- Check the wrapped KettleDatabaseException cause for the underlying SQL error.
- Verify the repository database is writable and has free space.
- Reconnect to the repository and retry saving the job.
- Confirm the repository schema matches the Pentaho/Kettle version (run upgrade scripts).
Example fix
// before
jobEntrySpecial.saveRep(rep, metaStore, idJob, databases, slaveServers);
// after
try {
jobEntrySpecial.saveRep(rep, metaStore, idJob, databases, slaveServers);
} catch (KettleException e) {
logError("Save failed for job " + idJob + ": " + e.getCause(), e);
throw e;
} Defensive patterns
Strategy: try-catch
Validate before calling
if (rep == null || idJob == null) throw new IllegalArgumentException("Repository and idJob are required for saveRep");
// verify writability early by performing a small test save if possible
Try / catch
try {
special.saveRep(rep, metaStore, idJob, databases, slaveServers);
} catch (KettleException e) {
logError("Save failed for id_job=" + idJob + " cause=" + e.getCause(), e);
} Prevention
- Ensure the repository DB is writable and has free space
- Reconnect if the repository session expired
- Avoid concurrent edits to the same job
- Run schema upgrade scripts after version upgrades
When it happens
Trigger: Calling saveRep for a 'special' job entry when saveJobEntryAttribute fails: repository connection lost, R_JOBENTRY_ATTRIBUTE insert/update violates constraints, read-only database, or getObjectId() refers to a stale/missing row.
Common situations: Repository DB in read-only mode or out of space; saving a job while the repository session expired; concurrent edits causing constraint violations; DB schema not upgraded to the current Kettle version.
Related errors
- Unable to load job entry for type file exists from the…
- Unable to load job entry from the repository for…
- Unable to load job entry from the repository for…
- Unable to load job entry of type 'Msgbox Info' from the…
- Unable to load job entry of type 'special' from the…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/8f4f82c8742574cb.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/special/JobEntrySpecial.java:152
}
}
// Save the attributes of this job entry
//
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
try {
rep.saveJobEntryAttribute( id_job, getObjectId(), "start", start );
rep.saveJobEntryAttribute( id_job, getObjectId(), "dummy", dummy );
rep.saveJobEntryAttribute( id_job, getObjectId(), "repeat", repeat );
rep.saveJobEntryAttribute( id_job, getObjectId(), "schedulerType", schedulerType );
rep.saveJobEntryAttribute( id_job, getObjectId(), "intervalSeconds", intervalSeconds );
rep.saveJobEntryAttribute( id_job, getObjectId(), "intervalMinutes", intervalMinutes );
rep.saveJobEntryAttribute( id_job, getObjectId(), "hour", hour );
rep.saveJobEntryAttribute( id_job, getObjectId(), "minutes", minutes );
rep.saveJobEntryAttribute( id_job, getObjectId(), "weekDay", weekDay );
rep.saveJobEntryAttribute( id_job, getObjectId(), "dayOfMonth", dayOfMonth );
} catch ( KettleDatabaseException dbe ) {
throw new KettleException( "Unable to save job entry of type 'special' to the repository with id_job="
+ id_job, dbe );
}
}
public boolean isStart() {
return start;
}
public boolean isDummy() {
return dummy;
}
public Result execute( Result previousResult, int nr ) throws KettleJobException {
Result result = previousResult;
if ( isStart() ) {
try {
long sleepTime = getNextExecutionTime();View on GitHub (pinned to f3058517a1)