{"record":{"id":"883f01cdd79e77ee","repo":"pentaho/pentaho-kettle","slug":"unable-to-save-job-entry-of-type-ftpput-to-the-repository","errorCode":null,"errorMessage":"Unable to save job entry of type 'FTPPUT' to the repository for id_job={0}","messagePattern":"Unable to save job entry of type 'FTPPUT' to the repository for id_job=(.+?)","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/put-a-file-with-ftp/impl/src/main/java/org/pentaho/di/job/entries/ftpput/JobEntryFTPPUT.java","lineNumber":312,"sourceCode":"      rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_TIMEOUT, timeout );\n      rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_REMOVE, remove );\n      rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_ONLY_NEW, onlyPuttingNewFiles );\n      rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_ACTIVE, activeConnection );\n      rep.saveJobEntryAttribute( idJob, getObjectId(), CONTROL_ENCODING, controlEncoding );\n\n      rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_PROXY_HOST, proxyHost );\n      rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_PROXY_PORT, proxyPort );\n      rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_PROXY_USERNAME, proxyUsername );\n      rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_PROXY_PASSWORD, Encr\n        .encryptPasswordIfNotUsingVariables( proxyPassword ) );\n      rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_SOCKSPROXY_HOST, socksProxyHost );\n      rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_SOCKSPROXY_PORT, socksProxyPort );\n      rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_SOCKSPROXY_USERNAME, socksProxyUsername );\n      rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_SOCKSPROXY_PASSWORD, Encr\n        .encryptPasswordIfNotUsingVariables( socksProxyPassword ) );\n\n    } catch ( KettleDatabaseException dbe ) {\n      throw new KettleException( BaseMessages.getString( PKG, \"JobFTPPUT.UnableToSaveToRepo\", String\n        .valueOf( idJob ) ), dbe );\n    }\n  }\n\n  /**\n   * @return Returns the binaryMode.\n   */\n  public boolean isBinaryMode() {\n    return binaryMode;\n  }\n\n  /**\n   * @param binaryMode The binaryMode to set.\n   */\n  public void setBinaryMode( boolean binaryMode ) {\n    this.binaryMode = binaryMode;\n  }\n","sourceCodeStart":294,"sourceCodeEnd":330,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/put-a-file-with-ftp/impl/src/main/java/org/pentaho/di/job/entries/ftpput/JobEntryFTPPUT.java#L294-L330","documentation":"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.","triggerScenarios":"Calling saveRep when a saveJobEntryAttribute write fails: repository DB unreachable, constraint violation, read-only connection, transaction rollback, or oversized attribute values.","commonSituations":"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.","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."],"exampleFix":null,"handlingStrategy":"retry","validationCode":"if ( rep == null || idJob == null ) { throw new IllegalArgumentException(\"Repository and idJob required before saveRep\"); }","typeGuard":null,"tryCatchPattern":"try { entry.saveRep(rep, metaStore, idJob); } catch (KettleException e) { log.error(\"FTPPUT repo save failed for \" + idJob, e); /* optionally retry once after reconnect */ }","preventionTips":["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."],"tags":["repository","job-entry","ftp","database-write"],"backgroundTag":"database-write-failed","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}