pentaho/pentaho-kettle · error · KettleException

Could not retrieve version history of object with path

Error message

Could not retrieve version history of object with path [${absPath}]

What it means

UnifiedRepositoryRevisionService.getRevisions asks the unified repository for the version history of a file at absPath and converts each VersionSummary into a PurObjectRevision. Any exception during retrieval is wrapped in this KettleException with the object's path in the message. It means version history could not be read for that object.

Solutions

  1. Verify the object path exists and the user has read access before requesting revisions.
  2. Enable versioning for the repository location/file type if history was expected.
  3. Check the wrapped cause (getCause()) to distinguish not-found vs. server errors.
  4. If the object was deleted, look for it in the repository trash or restore it first.

Example fix

// before
List<ObjectRevision> revs = revisionService.getRevisions( repository, path ); // may throw
// after
try {
  List<ObjectRevision> revs = revisionService.getRevisions( repository, path );
} catch ( KettleException e ) {
  if ( repository.exists( path, null ) ) {
    throw e; // genuine server error, rethrow
  }
  revs = Collections.emptyList(); // object absent: no history available
}
Defensive patterns

Strategy: try-catch

Validate before calling

if ( repository.exists( absPath, null ) ) {
  List<ObjectRevision> revs = revisionService.getRevisions( repository, absPath );
}

Try / catch

try {
  versions = revisionService.getRevisions( repository, absPath );
} catch ( KettleException e ) {
  logWarn( "No revision history for " + absPath + ": " + e.getCause() );
  versions = Collections.emptyList();
}

Prevention

When it happens

Trigger: Calling getRevisions (directly or via job/transformation revision lookups) for a path that doesn't exist, is not versionable (versioning disabled for that location), or when the underlying unifiedRepository.getVersions call fails.

Common situations: Requesting history for an object that was deleted or renamed, repositories with versioning disabled, permission errors on the file, or server-side version store issues in Jackrabbit.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


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

Appendix: source

Thrown at plugins/pur/core/src/main/java/org/pentaho/di/repository/pur/UnifiedRepositoryRevisionService.java:53

  @Override
  public List<ObjectRevision> getRevisions( final RepositoryElementInterface element ) throws KettleException {
    return getRevisions( element.getObjectId() );
  }

  @Override
  public List<ObjectRevision> getRevisions( ObjectId fileId ) throws KettleException {
    String absPath = null;
    try {
      List<ObjectRevision> versions = new ArrayList<ObjectRevision>();
      List<VersionSummary> versionSummaries = unifiedRepository.getVersionSummaries( fileId.getId() );
      for ( VersionSummary versionSummary : versionSummaries ) {
        versions.add( new PurObjectRevision( versionSummary.getId(), versionSummary.getAuthor(), versionSummary
            .getDate(), versionSummary.getMessage() ) );
      }
      return versions;
    } catch ( Exception e ) {
      throw new KettleException( "Could not retrieve version history of object with path [" + absPath + "]", e );
    }
  }

  @Override
  public void restoreJob( ObjectId id_job, String revision, String versionComment ) throws KettleException {
    unifiedRepository.restoreFileAtVersion( id_job.getId(), revision, versionComment );
    rootRef.clearRef();
  }

  @Override
  public void restoreTransformation( ObjectId id_transformation, String revision, String versionComment )
    throws KettleException {
    unifiedRepository.restoreFileAtVersion( id_transformation.getId(), revision, versionComment );
    rootRef.clearRef();
  }

}

View on GitHub (pinned to f3058517a1)