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
- Verify the object path exists and the user has read access before requesting revisions.
- Enable versioning for the repository location/file type if history was expected.
- Check the wrapped cause (getCause()) to distinguish not-found vs. server errors.
- 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
- Confirm versioning is enabled for the repository and file types
- Check file existence before requesting history
- Verify read permissions on the target path
- Treat empty history as normal for non-versioned locations
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
- DELETE_JOB : repository is read-only
- " + element.getName() + " has a null id
- ERROR_0002_Cannot_Load_Job_From_Repository
- FuzzyMatchMeta.Exception.UnexpecteErrorReadingStepInfoFromRe…
- FuzzyMatchMeta.Exception.UnableToSaveStepInfoToRepository
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)