pentaho/pentaho-kettle · error · KettleException
Unable to save job entry of type 'FTPPUT' to the repository…
Error message
Unable to save job entry of type 'FTPPUT' to the repository for id_job={0} What it means
JobEntryFTPPUT.saveRep wraps KettleDatabaseException failures from saveJobEntryAttribute calls and rethrows as 'Unable to save job entry of type FTPPUT to the repository for id_job={0}'. It means persisting this FTP Put entry's settings into the repository failed.
Solutions
- Inspect the chained KettleDatabaseException (dbe) for the SQL/DB root cause.
- Verify repository database connectivity and that the DB user has INSERT/UPDATE rights on r_jobentry_attribute.
- Retry the save after restoring the DB connection; check for lock contention.
- Save the job to a file (.kjb) as a workaround while fixing the repository.
Defensive patterns
Strategy: retry
Validate before calling
if ( rep == null || idJob == null ) { throw new IllegalArgumentException("Repository and idJob required before saveRep"); } Try / catch
try { entry.saveRep(rep, metaStore, idJob); } catch (KettleException e) { log.error("FTPPUT repo save failed for " + idJob, e); /* optionally retry once after reconnect */ } Prevention
- Test repository write access before long job-editing sessions.
- Ensure the repository DB user has INSERT/UPDATE privileges on r_jobentry_attribute.
- Save frequently to limit the blast radius of a failed save.
When it happens
Trigger: Calling saveRep when a saveJobEntryAttribute write fails: repository DB unreachable, constraint violation, read-only connection, transaction rollback, or oversized attribute values.
Common situations: Repository database down or network blip during save; insufficient DB user privileges (INSERT/UPDATE); repository locked by another process; disk full on the DB host.
Related errors
- JobEntryMSAccessBulkLoad.Meta.UnableSave
- JobXMLWellFormed.Error.Exception.UnableSaveRep + id_job
- Unable to load job entry of type 'ftp' from the repository…
- Unable to load job entry of type 'FTPPUT' from the…
- Unable to save job entry of type 'DTDvalidator' to the…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/883f01cdd79e77ee.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/put-a-file-with-ftp/impl/src/main/java/org/pentaho/di/job/entries/ftpput/JobEntryFTPPUT.java:312
rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_TIMEOUT, timeout );
rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_REMOVE, remove );
rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_ONLY_NEW, onlyPuttingNewFiles );
rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_ACTIVE, activeConnection );
rep.saveJobEntryAttribute( idJob, getObjectId(), CONTROL_ENCODING, controlEncoding );
rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_PROXY_HOST, proxyHost );
rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_PROXY_PORT, proxyPort );
rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_PROXY_USERNAME, proxyUsername );
rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_PROXY_PASSWORD, Encr
.encryptPasswordIfNotUsingVariables( proxyPassword ) );
rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_SOCKSPROXY_HOST, socksProxyHost );
rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_SOCKSPROXY_PORT, socksProxyPort );
rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_SOCKSPROXY_USERNAME, socksProxyUsername );
rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_SOCKSPROXY_PASSWORD, Encr
.encryptPasswordIfNotUsingVariables( socksProxyPassword ) );
} catch ( KettleDatabaseException dbe ) {
throw new KettleException( BaseMessages.getString( PKG, "JobFTPPUT.UnableToSaveToRepo", String
.valueOf( idJob ) ), dbe );
}
}
/**
* @return Returns the binaryMode.
*/
public boolean isBinaryMode() {
return binaryMode;
}
/**
* @param binaryMode The binaryMode to set.
*/
public void setBinaryMode( boolean binaryMode ) {
this.binaryMode = binaryMode;
}
View on GitHub (pinned to f3058517a1)