pentaho/pentaho-kettle · error · KettleException
Unable to save job entry of type 'FTPS' to the repository…
Error message
Unable to save job entry of type 'FTPS' to the repository for id_job=
What it means
KettleException thrown by JobEntryFTPSGet.saveRep when saving the job entry's attributes to the repository fails with a KettleDatabaseException. Message includes the id_job it attempted to save under.
Solutions
- Check repository database connectivity and that it is not read-only
- Verify the repository user has INSERT/UPDATE rights on the attribute tables
- Run the repository upgrade tool if PDI/plugin versions changed
- Retry saving; inspect the wrapped KettleDatabaseException for the SQL-level cause
Example fix
// before rep.saveJobEntryAttribute(id_job, id, "connection_type", badCode); // may violate FK // after String code = FTPSConnection.getConnectionTypeByCode(connectionType); // validate first rep.saveJobEntryAttribute(id_job, id, "connection_type", code);
Defensive patterns
Strategy: try-catch
Validate before calling
// ensure repository is writable beforehand
if (!rep.isConnected() || rep.isReadOnly())
throw new KettleException("Repository unavailable or read-only"); Try / catch
try {
jobEntry.saveRep(rep, metaStore, id_job);
} catch (KettleException dbe) {
logError("Repository save failed for id_job=" + id_job + ": " + dbe.getCause(), dbe);
throw dbe;
} Prevention
- Grant repository users INSERT/UPDATE rights
- Run repository schema upgrades after PDI version changes
- Monitor repository DB health before large job saves
When it happens
Trigger: saveRep when the repository insert/update of attributes (nr_limit, success_condition, connection_type) fails — connection loss, constraint violation, read-only repository, or schema mismatch
Common situations: repository database down or locked; user lacks write permission on the repository; PDI version upgrade left the repository schema outdated; duplicate/invalid attribute rows
Related errors
- AbortMeta.Exception.UnableToSaveStepInfoToRepository
- Edi2Xml.Exception.UnableToSaveStepInfoToRepository
- ERROR_0002_Cannot_Load_Job_From_Repository
- ERROR_0002
- ERROR_0003_Cannot_Save_Job_Entry
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/4bbbe5a2abc832a9.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/ftps/impl/src/main/java/org/pentaho/di/job/entries/ftpsget/JobEntryFTPSGet.java:356
rep.saveJobEntryAttribute( id_job, getObjectId(), "AddDateBeforeExtension", AddDateBeforeExtension );
rep.saveJobEntryAttribute( id_job, getObjectId(), "isaddresult", isaddresult );
rep.saveJobEntryAttribute( id_job, getObjectId(), "createmovefolder", createmovefolder );
rep.saveJobEntryAttribute( id_job, getObjectId(), "proxy_host", proxyHost );
rep.saveJobEntryAttribute( id_job, getObjectId(), "proxy_port", proxyPort );
rep.saveJobEntryAttribute( id_job, getObjectId(), "proxy_username", proxyUsername );
rep.saveJobEntryAttribute( id_job, getObjectId(), "proxy_password", Encr
.encryptPasswordIfNotUsingVariables( proxyPassword ) );
rep.saveJobEntryAttribute( id_job, getObjectId(), "ifFileExists", getFileExistsAction( ifFileExists ) );
rep.saveJobEntryAttribute( id_job, getObjectId(), "nr_limit", nr_limit );
rep.saveJobEntryAttribute( id_job, getObjectId(), "success_condition", success_condition );
rep.saveJobEntryAttribute( id_job, getObjectId(), "connection_type", FTPSConnection
.getConnectionType( connectionType ) );
} catch ( KettleDatabaseException dbe ) {
throw new KettleException(
"Unable to save job entry of type 'FTPS' to the repository for id_job=" + id_job, dbe );
}
}
public void setLimit( String nr_limitin ) {
this.nr_limit = nr_limitin;
}
public String getLimit() {
return nr_limit;
}
public void setSuccessCondition( String success_condition ) {
this.success_condition = success_condition;
}
public String getSuccessCondition() {
return success_condition;View on GitHub (pinned to f3058517a1)