{"record":{"id":"bf04eecfbad6c86e","repo":"pentaho/pentaho-kettle","slug":"unable-to-load-job-entry-of-type-ftp-from-the-repository-for","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/ftp-delete/impl/src/main/java/org/pentaho/di/job/entries/ftpdelete/JobEntryFTPDelete.java","lineNumber":369,"sourceCode":"\n      publicpublickey = rep.getJobEntryAttributeBoolean( id_jobentry, \"publicpublickey\" );\n      keyFilename = rep.getJobEntryAttributeString( id_jobentry, \"keyfilename\" );\n      keyFilePass = rep.getJobEntryAttributeString( id_jobentry, \"keyfilepass\" );\n\n      nr_limit_success = rep.getJobEntryAttributeString( id_jobentry, \"nr_limit_success\" );\n      success_condition = rep.getJobEntryAttributeString( id_jobentry, \"success_condition\" );\n      FTPSConnectionType =\n        FTPSConnection.getConnectionTypeByCode( Const.NVL( rep.getJobEntryAttributeString(\n          id_jobentry, \"ftps_connection_type\" ), \"\" ) );\n\n      socksProxyHost = rep.getJobEntryAttributeString( id_jobentry, \"socksproxy_host\" );\n      socksProxyPort = rep.getJobEntryAttributeString( id_jobentry, \"socksproxy_port\" );\n      socksProxyUsername = rep.getJobEntryAttributeString( id_jobentry, \"socksproxy_username\" );\n      socksProxyPassword =\n        Encr.decryptPasswordOptionallyEncrypted( rep.getJobEntryAttributeString(\n          id_jobentry, \"socksproxy_password\" ) );\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(), \"protocol\", protocol );\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(), \"wildcard\", wildcard );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"timeout\", timeout );\n\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"active\", activeConnection );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"copyprevious\", copyprevious );","sourceCodeStart":351,"sourceCodeEnd":387,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/ftp-delete/impl/src/main/java/org/pentaho/di/job/entries/ftpdelete/JobEntryFTPDelete.java#L351-L387","documentation":"JobEntryFTPDelete.loadRep reads the job entry's attributes from the repository by id_jobentry. Any KettleException (typically KettleDatabaseException) thrown by repository reads is rethrown with this message plus the offending id_jobentry.","triggerScenarios":"loadRep(rep, metaStore, id_jobentry, ...) when the repository cannot read attributes — the row for id_jobentry is missing, the table is unreachable, or a value cannot be converted.","commonSituations":"Repository database down or migrated; job entry rows deleted or orphaned; id_jobentry pointing at another plugin's entry; schema drift between Pentaho versions.","solutions":["Verify the repository database is reachable and credentials are valid","Check rows in r_jobentry / r_jobentry_attribute for the given id_jobentry","Inspect the wrapped `dbe` cause for the SQL error","Re-save the job entry from Spoon to rebuild its repository rows"],"exampleFix":"// before\nString port = rep.getJobEntryAttributeString( id_jobentry, \"socksproxy_port\" );\n// after\nif ( id_jobentry == null ) {\n  throw new KettleException( \"id_jobentry is null; cannot load FTP-delete entry\" );\n}\nString port = rep.getJobEntryAttributeString( id_jobentry, \"socksproxy_port\" );","handlingStrategy":"try-catch","validationCode":"if ( id_jobentry == null ) throw new KettleException( \"id_jobentry is required\" );\n// optionally verify existence first\nif ( rep.getJobEntryAttributeString( id_jobentry, \"name\" ) == null ) {\n  log.warn( \"No attributes found for id_jobentry=\" + id_jobentry );\n}","typeGuard":null,"tryCatchPattern":"try { jobEntry.loadRep( rep, metaStore, id, dbs, slaves ); }\ncatch ( KettleException ke ) {\n  log.error( \"Repository load failed for id_jobentry=\" + id + \": \" + ke.getCause() );\n}","preventionTips":["Check repository connectivity before loading jobs","Avoid orphaning r_jobentry rows during migrations","Run repository upgrade scripts after Pentaho version changes"],"tags":["repository","database","job-entry","ftp"],"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"}