pentaho/pentaho-kettle · error · KettleException

Unable to load job with id [" + idJob + "]

Error message

Unable to load job with id [" + idJob + "]

What it means

Catch-all wrapper in PurRepository.loadJob(ObjectId idJob, String versionLabel): any non-KettleException while loading a job by id (file fetch at version, revision lookup, JobMeta build, JobMetaLoaded extension point) is re-thrown as a KettleException with the job id in the message.

Solutions

  1. Check e.getCause() for the real failure (not-found vs IO vs parse)
  2. Validate the id still exists via repository.exists(ObjectId) before loading
  3. Re-connect to the repository and retry after a connectivity failure
  4. Verify the versionLabel is valid by listing object revisions first

Example fix

// before
JobMeta jm = repo.loadJob(staleId, null);
// after
if (repo.exists(staleId)) {
  JobMeta jm = repo.loadJob(staleId, null);
} else {
  // re-resolve id from path
  JobMeta jm = repo.loadJob(path, dir, null, null);
}
Defensive patterns

Strategy: try-catch

Validate before calling

if (!repo.exists(idJob)) {
  throw new KettleException("Job id no longer exists: " + idJob);
}

Try / catch

try {
  JobMeta jm = repo.loadJob(idJob, versionLabel);
} catch (KettleException e) {
  log.error("Job load failed for id " + idJob + ", cause=" + e.getCause(), e);
  // fallback: reload by path to obtain a fresh id
  JobMeta jm2 = repo.loadJob(path, dir, null, null);
}

Prevention

When it happens

Trigger: Calling loadJob(ObjectId, String versionLabel) with an invalid/deleted id, an unsupported versionLabel, corrupt stored content, or a repository connection failure.

Common situations: Caching an ObjectId that was later deleted; referencing an id from another repository; requesting a version label that no longer exists; server connection dropped mid-load.

Understand the failure class

Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/d14558e5b58b6434. Report an issue: GitHub.

Appendix: source

Thrown at plugins/pur/core/src/main/java/org/pentaho/di/repository/pur/PurRepository.java:3244

        jobMeta.setMetaStore( MetaStoreConst.getDefaultMetastore() ); // inject metastore

        // Additional obfuscation through obscurity
        jobMeta.setRepositoryLock( unifiedRepositoryLockService.getLock( file ) );

        ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.JobSharedObjectsLoaded.id, jobMeta );
        jobDelegate.dataNodeToElement( pur.getDataAtVersionForRead( idJob.getId(), versionLabel,
          NodeRepositoryFileData.class ).getNode(), jobMeta );

      } finally {
        readWriteLock.readLock().unlock();
      }

      ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.JobMetaLoaded.id, jobMeta );

      jobMeta.clearChanged();
      return jobMeta;
    } catch ( Exception e ) {
      throw new KettleException( "Unable to load job with id [" + idJob + "]", e );
    }
  }

  @Override
  public TransMeta loadTransformation( ObjectId idTransformation, String versionLabel ) throws KettleException {
    return loadTransformation( idTransformation, versionLabel, null );
  }

  @Override
  public TransMeta loadTransformation( ObjectId idTransformation, String versionLabel, VariableSpace parent )
      throws KettleException {
    try {
      RepositoryFile file = null;
      EETransMeta transMeta = null;

      readWriteLock.readLock().lock();
      try {
        if ( versionLabel != null ) {

View on GitHub (pinned to f3058517a1)