pentaho/pentaho-kettle · error · KettleException
Unable to save job entry of type 'Syslog' to the repository…
Error message
Unable to save job entry of type 'Syslog' to the repository for id_job=
What it means
JobEntrySyslog.saveRep wraps any KettleDatabaseException thrown while persisting the Syslog job entry attributes into a KettleException with this message, keeping the original as cause. It means the write of this entry's attributes to the repository failed; nothing about the Syslog configuration itself was validated.
Solutions
- Check the chained KettleDatabaseException cause for the exact SQL error
- Verify the repository user has write privileges and the repository is not read-only
- Ensure getObjectId() is valid — re-save the whole job from Spoon so IDs are assigned
- Test repository connectivity and retry the save
- Check database-side limits (disk space, lock timeouts, column size for message attribute)
Example fix
// before: saving detached entry with null ObjectId rep.saveJobEntryAttribute(id_job, jobEntry.getObjectId(), "message", msg); // throws // after: persist the job first so the entry gets an ObjectId job.saveRep(rep, metaStore); // assigns IDs, then attribute writes succeed
Defensive patterns
Strategy: try-catch
Validate before calling
// Java: ensure entry is attached and IDs assigned before saving attributes
if (jobEntry.getObjectId() == null) {
throw new KettleException("Entry not persisted yet; save the job first");
} Type guard
if (id_job != null && getObjectId() != null && rep != null) { /* safe to saveRep */ } Try / catch
try {
jobEntry.saveRep(rep, metaStore, id_job);
} catch (KettleException e) {
logError("Repository save failed for Syslog entry: " + e.getCause(), e);
// check DB connectivity/permissions, then retry once
} Prevention
- Grant the repository user write privileges
- Save the whole job from Spoon so ObjectIds are assigned
- Monitor repository DB for disk space and lock contention
- Avoid concurrent Spoon sessions writing the same job
When it happens
Trigger: Calling saveRep when the repository insert/update of any attribute (port, priority, message, datePattern, addTimestamp, addHostname) fails: repository connection lost, read-only repository, ObjectId invalid/null, or constraint violation in r_jobentry_attribute.
Common situations: Saving a job while the repository database session was dropped; repository user lacks write permissions; saving a new entry whose ObjectId was never assigned (entry not yet inserted); database disk full or table locked.
Related errors
- GetXMLDataMeta.Exception.ErrorReadingRepository (localized…
- GetXMLDataMeta.Exception.ErrorSavingToRepository (localized…
- StepMeta.Exception.StepCouldNotBeLoaded
- StepMeta.Exception.StepInfoCouldNotBeFound
- StepMeta.Exception.UnableToSaveStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/f1904b869a3ddc0c.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/syslog/JobEntrySyslog.java:144
} catch ( KettleException dbe ) {
throw new KettleException( "Unable to load job entry of type 'Syslog' from the repository for id_jobentry="
+ id_jobentry, dbe );
}
}
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
try {
rep.saveJobEntryAttribute( id_job, getObjectId(), "port", port );
rep.saveJobEntryAttribute( id_job, getObjectId(), "servername", serverName );
rep.saveJobEntryAttribute( id_job, getObjectId(), "facility", facility );
rep.saveJobEntryAttribute( id_job, getObjectId(), "priority", priority );
rep.saveJobEntryAttribute( id_job, getObjectId(), "message", message );
rep.saveJobEntryAttribute( id_job, getObjectId(), "datePattern", datePattern );
rep.saveJobEntryAttribute( id_job, getObjectId(), "addTimestamp", addTimestamp );
rep.saveJobEntryAttribute( id_job, getObjectId(), "addHostname", addHostname );
} catch ( KettleDatabaseException dbe ) {
throw new KettleException( "Unable to save job entry of type 'Syslog' to the repository for id_job="
+ id_job, dbe );
}
}
/**
* @return Returns the serverName.
*/
public String getServerName() {
return serverName;
}
/**
* @param serverName
* The serverName to set.
*/
public void setServerName( String serverName ) {
this.serverName = serverName;
}View on GitHub (pinned to f3058517a1)