pentaho/pentaho-kettle · error · KettleException

Unable to load job from path [" + absPath + "]

Error message

Unable to load job from path [" + absPath + "]

What it means

Catch-all wrapper in PurRepository.loadJob(jobname, ...): any non-KettleException during job load (path lookup, file/version read, JobMeta build, JobMetaLoaded extension point) is re-thrown as a KettleException with the absPath in the message and the original exception as cause.

Solutions

  1. Check e.getCause() to identify the underlying failure
  2. Verify repository connectivity and re-authenticate
  3. Open the job in Spoon to validate the stored content is not corrupt
  4. Fix or disable JobMetaLoaded extension-point plugins

Example fix

// before
} catch ( Exception e ) {
  throw new KettleException( "Unable to load job from path [" + absPath + "]", e );
}
// after
} catch ( Exception e ) {
  log.error("Job load failed: " + absPath + ", root cause: " + e.getCause(), e);
  throw new KettleException( "Unable to load job from path [" + absPath + "]", e );
}
Defensive patterns

Strategy: try-catch

Validate before calling

if (!repo.isConnected()) repo.connect("user", "pass");
if (!repo.exists(jobPath, RepositoryObjectType.JOB)) {
  throw new KettleException("Missing job: " + jobPath);
}

Try / catch

try {
  return repo.loadJob(path, dir, null, null);
} catch (KettleException e) {
  log.error("Job load failed for " + path + ", cause=" + e.getCause(), e);
  throw e;
}

Prevention

When it happens

Trigger: Repository connection failure, getDataAtVersionForRead error, buildJobMeta failure on corrupt content, or a JobMetaLoaded extension point throwing during loadJob(String path,...).

Common situations: BI server unreachable mid-load; corrupt job XML; plugin extension point throwing; ACL errors surfaced as generic exceptions; null revision data for the requested version.

Understand the failure class

Background: "failed to read file", EACCES, ENOENT and "could not read <path>" errors: when a program can't read a file from disk — this error's family across 49 libraries.

Related errors


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

Appendix: source

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

      ObjectRevision revision = null;
      try {
        file = pur.getFile( absPath );
        if ( versionId != null ) {
          // need to go back to server to get versioned info
          file = pur.getFileAtVersion( file.getId(), versionId );
        }

        data = pur.getDataAtVersionForRead( file.getId(), versionId, NodeRepositoryFileData.class );
      } finally {
        readWriteLock.readLock().unlock();
      }

      revision = getObjectRevision( new StringObjectId( file.getId().toString() ), versionId );
      JobMeta jobMeta = buildJobMeta( file, parentDir, data, revision, parent );
      ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.JobMetaLoaded.id, jobMeta );
      return jobMeta;
    } catch ( Exception e ) {
      throw new KettleException( "Unable to load job from path [" + absPath + "]", e );
    }
  }

  private JobMeta buildJobMeta( final RepositoryFile file, final RepositoryDirectoryInterface parentDir,
                                final NodeRepositoryFileData data, final ObjectRevision revision,
                                final VariableSpace parent )
    throws KettleException {
    JobMeta jobMeta = new JobMeta( parent );
    jobMeta.setName( file.getTitle() );
    jobMeta.setFilename( file.getPath() );
    jobMeta.setDescription( file.getDescription() );
    jobMeta.setObjectId( new StringObjectId( file.getId().toString() ) );
    jobMeta.setObjectRevision( revision );
    jobMeta.setRepository( this );
    jobMeta.setRepositoryDirectory( parentDir );
    jobMeta.setMetaStore( MetaStoreConst.getDefaultMetastore() );
    ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.JobSharedObjectsLoaded.id, jobMeta );
    jobDelegate.dataNodeToElement( data.getNode(), jobMeta );

View on GitHub (pinned to f3058517a1)