mirror of
https://github.com/datahub-project/datahub.git
synced 2025-12-27 18:07:57 +00:00
fix(gms): fixes for version aspect fetching (#2723)
This commit is contained in:
parent
7171e97a48
commit
48061454ff
@ -96,7 +96,7 @@ public class ResolverUtils {
|
||||
Object localContext = environment.getLocalContext();
|
||||
// if we have context & the version is 0, we should try to retrieve it from the fetched entity
|
||||
// otherwise, we should just fetch the entity from the aspect resource
|
||||
if (localContext == null && version == 0 || version == null) {
|
||||
if (localContext != null && version == 0 || version == null) {
|
||||
if (localContext instanceof Map) {
|
||||
// de-register the prefetched aspect from local context. Since aspects will only
|
||||
// ever be first-class properties of an entity type, local context will always
|
||||
|
||||
@ -91,12 +91,22 @@ public class EbeanEntityService extends EntityService {
|
||||
return urnToAspects;
|
||||
}
|
||||
|
||||
/*
|
||||
* When a user tries to fetch a negative version, we want to index most recent to least recent snapshots.
|
||||
* To do this, we want to fetch the maximum version and subtract the negative version from that. Since -1 represents
|
||||
* the maximum version, we need to add 1 to the final result.
|
||||
*/
|
||||
private long calculateVersionNumber(@Nonnull final Urn urn, @Nonnull final String aspectName, @Nonnull long version) {
|
||||
if (version < 0) {
|
||||
return _entityDao.getMaxVersion(urn.toString(), aspectName) + version + 1;
|
||||
}
|
||||
return version;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public RecordTemplate getAspect(@Nonnull final Urn urn, @Nonnull final String aspectName, @Nonnull long version) {
|
||||
if (version < 0) {
|
||||
version = _entityDao.getMaxVersion(urn.toString(), aspectName) - version + 1;
|
||||
}
|
||||
version = calculateVersionNumber(urn, aspectName, version);
|
||||
final EbeanAspectV2.PrimaryKey primaryKey = new EbeanAspectV2.PrimaryKey(urn.toString(), aspectName, version);
|
||||
final Optional<EbeanAspectV2> maybeAspect = Optional.ofNullable(_entityDao.getAspect(primaryKey));
|
||||
return maybeAspect
|
||||
@ -108,9 +118,7 @@ public class EbeanEntityService extends EntityService {
|
||||
public VersionedAspect getVersionedAspect(@Nonnull Urn urn, @Nonnull String aspectName, long version) {
|
||||
VersionedAspect result = new VersionedAspect();
|
||||
|
||||
if (version < 0) {
|
||||
version = _entityDao.getMaxVersion(urn.toString(), aspectName) + version + 1;
|
||||
}
|
||||
version = calculateVersionNumber(urn, aspectName, version);
|
||||
|
||||
final EbeanAspectV2.PrimaryKey primaryKey = new EbeanAspectV2.PrimaryKey(urn.toString(), aspectName, version);
|
||||
final Optional<EbeanAspectV2> maybeAspect = Optional.ofNullable(_entityDao.getAspect(primaryKey));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user