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
- Check e.getCause() for the real failure (not-found vs IO vs parse)
- Validate the id still exists via repository.exists(ObjectId) before loading
- Re-connect to the repository and retry after a connectivity failure
- 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
- Do not cache ObjectIds across repository sessions
- Validate version labels via getObjectRevision before loading
- Re-resolve ids from paths when loads fail
- Check connectivity before load operations
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
- Unable to load job from path [" + absPath + "]
- PurRepository.ERROR_0003_JOB_NOT_FOUND
- Unable to load transformation from path [" + absPath + "]
- Unable to load transformation with id [" + idTransformation…
- Could not retrieve version history of object with path
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)