{"record":{"id":"f4cd18360b513290","repo":"pentaho/pentaho-kettle","slug":"unable-to-load-job-entry-of-type-ftp-from-the-repository-for-f4cd18","errorCode":null,"errorMessage":"Unable to load job entry of type 'ftp' from the repository for id_jobentry=","messagePattern":"Unable to load job entry of type 'ftp' from the repository for id_jobentry=","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/get-file-with-ftp/impl/src/main/java/org/pentaho/di/job/entries/ftp/JobEntryFTP.java","lineNumber":419,"sourceCode":"          id_jobentry, \"socksproxy_password\" ) );\n      SifFileExists = rep.getJobEntryAttributeString( id_jobentry, \"ifFileExists\" );\n      if ( Utils.isEmpty( SifFileExists ) ) {\n        ifFileExists = ifFileExistsSkip;\n      } else {\n        if ( SifFileExists.equals( SifFileExistsCreateUniq ) ) {\n          ifFileExists = ifFileExistsCreateUniq;\n        } else if ( SifFileExists.equals( SifFileExistsFail ) ) {\n          ifFileExists = ifFileExistsFail;\n        } else {\n          ifFileExists = ifFileExistsSkip;\n        }\n      }\n      nr_limit = rep.getJobEntryAttributeString( id_jobentry, \"nr_limit\" );\n      success_condition =\n        Const.NVL( rep.getJobEntryAttributeString( id_jobentry, \"success_condition\" ), SUCCESS_IF_NO_ERRORS );\n\n    } catch ( KettleException dbe ) {\n      throw new KettleException( \"Unable to load job entry of type 'ftp' from the repository for id_jobentry=\"\n        + id_jobentry, dbe );\n    }\n  }\n\n  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {\n    try {\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"port\", port );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"servername\", serverName );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"username\", userName );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"password\", Encr\n        .encryptPasswordIfNotUsingVariables( password ) );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"ftpdirectory\", ftpDirectory );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"targetdirectory\", targetDirectory );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"wildcard\", wildcard );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"binary\", binaryMode );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"timeout\", timeout );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"remove\", remove );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"only_new\", onlyGettingNewFiles );","sourceCodeStart":401,"sourceCodeEnd":437,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/get-file-with-ftp/impl/src/main/java/org/pentaho/di/job/entries/ftp/JobEntryFTP.java#L401-L437","documentation":"JobEntryFTP.loadRep() throws this KettleException when reading the FTP entry's attributes from the Kettle repository fails. Any KettleException from rep.getJobEntryAttributeString(...) is rethrown as \"Unable to load job entry of type 'ftp' from the repository for id_jobentry=\" + id_jobentry with the cause chained. It indicates the entry's attribute rows cannot be read from r_jobentry_attribute for that id.","triggerScenarios":"Loading an FTP job entry by ObjectId when the repository rows are missing/corrupt, the repository database is unreachable, the query fails due to permissions, or the id_jobentry points to rows of a different entry type/version.","commonSituations":"Repository schema migration after Pentaho upgrades; manually pruned or corrupted attribute tables; connecting to the wrong repository database; transient DB connectivity failures.","solutions":["Examine the cause for the underlying repository/database error and restore connectivity or fix permissions.","Verify attribute rows exist for the id_jobentry in r_jobentry_attribute; recreate the entry in Spoon if missing.","Confirm you are connected to the correct repository where the job was originally saved.","Re-save the entry with the current plugin version to normalize stored attributes."],"exampleFix":"// before: loading unconditionally\nftpEntry.loadRep( rep, metaStore, id_jobentry, databases, slaveServers );\n// after: check existence first\nif ( rep.getJobEntry( id_jobentry ) == null ) {\n  throw new KettleException( \"FTP entry \" + id_jobentry + \" not found in repository\" );\n}\nftpEntry.loadRep( rep, metaStore, id_jobentry, databases, slaveServers );","handlingStrategy":"try-catch","validationCode":"if ( !rep.isConnected() || rep.getJobEntry( id_jobentry ) == null ) {\n  throw new KettleException( \"FTP entry \" + id_jobentry + \" unavailable in repository\" );\n}","typeGuard":null,"tryCatchPattern":"try {\n  entry.loadRep( rep, metaStore, id_jobentry, databases, slaveServers );\n} catch ( KettleException e ) {\n  log.error( \"FTP entry repo load failed: \" + e.getCause() );\n  throw new KettleException( \"Check repository connectivity/schema and reload\", e );\n}","preventionTips":["Apply repository upgrade scripts after Pentaho upgrades.","Test the repository connection before loading jobs.","Confirm you are on the correct repository database for the environment.","Recreate corrupted entries in Spoon instead of editing repository tables directly."],"tags":["kettle","ftp","repository","database"],"backgroundTag":"database-query-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"}