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

  1. Verify the repository database is reachable and credentials are valid
  2. Check the r_jobentry row for the given id_jobentry exists and has expected attributes
  3. Re-create the job entry in Spoon if its repository row is corrupt
  4. 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

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


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)