pentaho/pentaho-kettle · error · KettleException
Unable to save job entry of type 'shell' to the repository
Error message
Unable to save job entry of type 'shell' to the repository
What it means
JobEntryShell.saveRep persists the job entry to the repository; a KettleDatabaseException while saving attributes (including each argument row via saveJobEntryAttribute) is wrapped in KettleException('Unable to save job entry of type 'shell' to the repository'). The job is not saved and the transaction typically rolls back.
Solutions
- Check the nested KettleDatabaseException for the underlying SQL error
- Verify repository DB connectivity, credentials, and that it is not read-only
- Shorten oversized arguments (or widen the repository VALUE column)
- Retry the save; resolve locks/timeouts if the DB was under load
Defensive patterns
Strategy: try-catch
Try / catch
try {
jobEntryShell.saveRep(rep, metaStore, idJob);
} catch (KettleException e) {
logError("Repository save failed: " + e.getCause().getMessage(), e);
// surface to user before the job window closes
} Prevention
- Keep shell argument strings within the repository VALUE column size
- Verify repository DB is writable and not in read-only mode
- Check DB connection health before long Spoon sessions
- Resolve locks/timeouts from concurrent saves before retrying
When it happens
Trigger: rep.saveJobEntryAttribute(id_job, objectId, i, 'argument', arguments[i]) throws — repository DB unreachable, table lock/timeout, column size exceeded by a long argument, or constraint violation.
Common situations: Repository database down or credentials expired while saving a job in Spoon; argument string longer than the VALUE column size; database in read-only mode; deadlock/timeout under concurrent saves.
Related errors
- Unable to load job entry of type 'shell' from the…
- JobEntryCheckFilesLocked.UnableToLoadFromRepo
- JobEntryCheckFilesLocked.UnableToSaveToRepo
- JobEntryColumnsExist.Meta.UnableLoadRep
- JobEntryColumnsExist.Meta.UnableSaveRep
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/1f07a59f8cbeeb5b.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/shell/JobEntryShell.java:248
rep.saveJobEntryAttribute( id_job, getObjectId(), "set_logfile", setLogfile );
rep.saveJobEntryAttribute( id_job, getObjectId(), "set_append_logfile", setAppendLogfile );
rep.saveJobEntryAttribute( id_job, getObjectId(), "add_date", addDate );
rep.saveJobEntryAttribute( id_job, getObjectId(), "add_time", addTime );
rep.saveJobEntryAttribute( id_job, getObjectId(), "logfile", logfile );
rep.saveJobEntryAttribute( id_job, getObjectId(), "logext", logext );
rep.saveJobEntryAttribute( id_job, getObjectId(), "loglevel", logFileLevel == null ? LogLevel.NOTHING
.getCode() : logFileLevel.getCode() );
rep.saveJobEntryAttribute( id_job, getObjectId(), "insertScript", insertScript );
rep.saveJobEntryAttribute( id_job, getObjectId(), "script", script );
// save the arguments...
if ( arguments != null ) {
for ( int i = 0; i < arguments.length; i++ ) {
rep.saveJobEntryAttribute( id_job, getObjectId(), i, "argument", arguments[i] );
}
}
} catch ( KettleDatabaseException dbe ) {
throw new KettleException( "Unable to save job entry of type 'shell' to the repository", dbe );
}
}
public void clear() {
super.clear();
filename = null;
workDirectory = null;
arguments = null;
argFromPrevious = false;
addDate = false;
addTime = false;
logfile = null;
logext = null;
setLogfile = false;
execPerRow = false;
setAppendLogfile = false;
insertScript = false;View on GitHub (pinned to f3058517a1)