pentaho/pentaho-kettle · error · KettleException
Unable to load job entry of type 'FTPPUT' from the…
Error message
Unable to load job entry of type 'FTPPUT' from the repository for id_jobentry={0} What it means
JobEntryFTPPUT.loadRep wraps KettleException failures from repository attribute reads and rethrows as 'Unable to load job entry of type FTPPUT from the repository for id_jobentry={0}'. It means one or more getJobEntryAttribute* calls failed while loading this entry's settings from the repository database.
Solutions
- Check the chained KettleException (dbe) for the root database error and fix connectivity/schema accordingly.
- Verify the repository tables exist and match your Pentaho version (run repository upgrade scripts).
- Confirm id_jobentry points to an existing row set; reload the job from the repository.
- If rows are corrupted, delete and recreate the FTP Put job entry in the repository.
Defensive patterns
Strategy: try-catch
Validate before calling
boolean exists = rep != null && jobEntryId != null && rep.getJobEntryAttributeString(jobEntryId, "hostname") != null; // probe one attribute first
Try / catch
try { entry.loadRep(rep, metaStore, jobEntryId, databases, slaveServers); } catch (KettleException e) { log.error("FTPPUT repo load failed for " + jobEntryId, e); } Prevention
- Run repository upgrade scripts after Pentaho upgrades.
- Verify DB connectivity before opening jobs from a repository.
- Back up r_jobentry_attribute rows before bulk edits.
When it happens
Trigger: Calling loadRep when the underlying repository query fails: missing r_jobentry_attribute rows, database connectivity loss mid-load, schema mismatch, or corrupted jobEntryId.
Common situations: Repository database schema out of date after upgrade; DB connection dropped while opening a job; job entry rows deleted or corrupted in the repository tables.
Understand the failure class
Background: Database query failed: Internal Server Error 500s wrapping SQL, Prisma, and connection failures — what to check first — this error's family across 16 libraries.
Related errors
- Unable to load job entry of type 'ftp' from the repository…
- ERROR_0002_Cannot_Load_Job_From_Repository
- ERROR_0002_Cannot_Load_Job_From_Repository
- ERROR_0002_Unable_To_Load_Job_From_Repository
- JobEntryAbort.UnableToLoadFromRepo.Label
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/58a365f472979392.
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:277
// put in the encoding used before v 2.4.0
controlEncoding = LEGACY_CONTROL_ENCODING;
}
proxyHost = rep.getJobEntryAttributeString( jobEntryId, XML_TAG_PROXY_HOST );
proxyPort = rep.getJobEntryAttributeString( jobEntryId, XML_TAG_PROXY_PORT );
proxyUsername = rep.getJobEntryAttributeString( jobEntryId, XML_TAG_PROXY_USERNAME );
proxyPassword =
Encr
.decryptPasswordOptionallyEncrypted( rep.getJobEntryAttributeString( jobEntryId, XML_TAG_PROXY_PASSWORD ) );
socksProxyHost = rep.getJobEntryAttributeString( jobEntryId, XML_TAG_SOCKSPROXY_HOST );
socksProxyPort = rep.getJobEntryAttributeString( jobEntryId, XML_TAG_SOCKSPROXY_PORT );
socksProxyUsername = rep.getJobEntryAttributeString( jobEntryId, XML_TAG_SOCKSPROXY_USERNAME );
socksProxyPassword =
Encr.decryptPasswordOptionallyEncrypted( rep.getJobEntryAttributeString(
jobEntryId, XML_TAG_SOCKSPROXY_PASSWORD ) );
} catch ( KettleException dbe ) {
throw new KettleException( BaseMessages.getString( PKG, "JobFTPPUT.UnableToLoadFromRepo", String
.valueOf( jobEntryId ) ), dbe );
}
}
@Override
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId idJob ) throws KettleException {
try {
rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_SERVERNAME, serverName );
rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_SERVERPORT, serverPort );
rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_USERNAME, userName );
rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_PASSWORD, Encr
.encryptPasswordIfNotUsingVariables( password ) );
rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_REMOTE_DIRECTORY, remoteDirectory );
rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_LOCAL_DIRECTORY, localDirectory );
rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_WILDCARD, wildcard );
rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_BINARY, binaryMode );
rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_TIMEOUT, timeout );
rep.saveJobEntryAttribute( idJob, getObjectId(), XML_TAG_REMOVE, remove );View on GitHub (pinned to f3058517a1)