pentaho/pentaho-kettle · error · KettleException
Unable to load job entry of type 'FTPS' from the repository…
Error message
Unable to load job entry of type 'FTPS' from the repository for id_jobentry=
What it means
KettleException thrown by JobEntryFTPSGet.loadRep when reading the job entry's attributes from the repository fails for the given id_jobentry — typically a KettleDatabaseException from the repository store.
Solutions
- Verify the repository database is reachable and credentials are valid
- Check the r_jobentry row for the given id_jobentry exists and has expected attributes
- Re-create the job entry in Spoon if its repository row is corrupt
- Align repository schema/plugin versions after upgrades
Example fix
// before // loading by stale id after repo migration jobEntry.loadRep(rep, metaStore, oldId, databases, slaveServers); // after ObjectId id = rep.findJobEntryId(name); // resolve fresh id if (id != null) jobEntry.loadRep(rep, metaStore, id, databases, slaveServers);
Defensive patterns
Strategy: try-catch
Validate before calling
// confirm the row exists before load
if (rep.findJobEntry(id_jobentry) == null)
throw new KettleException("No repository row for id_jobentry=" + id_jobentry); Try / catch
try {
jobEntry.loadRep(rep, metaStore, id_jobentry, databases, slaveServers);
} catch (KettleException dbe) {
logError("Repository load failed for id=" + id_jobentry, dbe);
throw dbe;
} Prevention
- Check repository connectivity before loading jobs
- Keep repository schema and plugin versions in sync
- Avoid referencing job entry ids deleted from the repository
When it happens
Trigger: loadRep when the repository row for id_jobentry is missing/corrupt, the repository connection is down, or an attribute read throws
Common situations: repository database unavailable or migrated; job entry row deleted or with wrong id; repository schema version mismatch after a PDI upgrade
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
- JobXMLWellFormed.Error.Exception.UnableLoadRep + id_jobentry
- Unable to load job entry of type 'DTDvalidator' from the…
- AbortMeta.Exception.UnableToSaveStepInfoToRepository
- AccessInputMeta.Exception.ErrorReadingRepository
- AddSequenceMeta.Exception.UnableToReadStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/3f026b134c70cf06.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/ftps/impl/src/main/java/org/pentaho/di/job/entries/ftpsget/JobEntryFTPSGet.java:310
createmovefolder = rep.getJobEntryAttributeBoolean( id_jobentry, "createmovefolder" );
proxyHost = rep.getJobEntryAttributeString( id_jobentry, "proxy_host" );
proxyPort = rep.getJobEntryAttributeString( id_jobentry, "proxy_port" );
proxyUsername = rep.getJobEntryAttributeString( id_jobentry, "proxy_username" );
proxyPassword =
Encr
.decryptPasswordOptionallyEncrypted( rep.getJobEntryAttributeString( id_jobentry, "proxy_password" ) );
ifFileExists = getFileExistsIndex( rep.getJobEntryAttributeString( id_jobentry, "ifFileExists" ) );
nr_limit = rep.getJobEntryAttributeString( id_jobentry, "nr_limit" );
success_condition =
Const.NVL( rep.getJobEntryAttributeString( id_jobentry, "success_condition" ), SUCCESS_IF_NO_ERRORS );
connectionType =
FTPSConnection.getConnectionTypeByCode( Const.NVL( rep.getJobEntryAttributeString(
id_jobentry, "connection_type" ), "" ) );
} catch ( KettleException dbe ) {
throw new KettleException( "Unable to load job entry of type 'FTPS' from the repository for id_jobentry="
+ id_jobentry, dbe );
}
}
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
try {
rep.saveJobEntryAttribute( id_job, getObjectId(), "port", port );
rep.saveJobEntryAttribute( id_job, getObjectId(), "servername", serverName );
rep.saveJobEntryAttribute( id_job, getObjectId(), "username", userName );
rep.saveJobEntryAttribute( id_job, getObjectId(), "password", Encr
.encryptPasswordIfNotUsingVariables( password ) );
rep.saveJobEntryAttribute( id_job, getObjectId(), "FTPSdirectory", FTPSDirectory );
rep.saveJobEntryAttribute( id_job, getObjectId(), "targetdirectory", targetDirectory );
rep.saveJobEntryAttribute( id_job, getObjectId(), "wildcard", wildcard );
rep.saveJobEntryAttribute( id_job, getObjectId(), "binary", binaryMode );
rep.saveJobEntryAttribute( id_job, getObjectId(), "timeout", timeout );
rep.saveJobEntryAttribute( id_job, getObjectId(), "remove", remove );
rep.saveJobEntryAttribute( id_job, getObjectId(), "only_new", onlyGettingNewFiles );View on GitHub (pinned to f3058517a1)