From a7ae99ca5e18546d3ff6209426016613ac027375 Mon Sep 17 00:00:00 2001 From: John Joyce Date: Thu, 18 Jul 2024 08:55:35 -0700 Subject: [PATCH] chore() Set a default lineage filtering end time on backend when a start time is present (#10925) Co-authored-by: John Joyce Co-authored-by: John Joyce --- .../datahub/graphql/resolvers/ResolverUtils.java | 15 +++++++++++++++ .../load/EntityLineageResultResolver.java | 6 +++++- .../search/ScrollAcrossLineageResolver.java | 3 ++- .../search/SearchAcrossLineageResolver.java | 3 ++- .../common/mappers/LineageFlagsInputMapper.java | 11 ++++++++--- 5 files changed, 32 insertions(+), 6 deletions(-) diff --git a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/ResolverUtils.java b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/ResolverUtils.java index 542745e014..3617eb4725 100644 --- a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/ResolverUtils.java +++ b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/ResolverUtils.java @@ -255,4 +255,19 @@ public class ResolverUtils { Filter result = SearchUtils.combineFilters(null, viewInfo.getDefinition().getFilter()); return result; } + + /** + * Simply resolves the end time filter for the search across lineage query. If the start time is + * provided, but end time is not provided, we will default to the current time. + */ + public static Long getLineageEndTimeMillis( + @Nullable Long startTimeMillis, @Nullable Long endTimeMillis) { + if (endTimeMillis != null) { + return endTimeMillis; + } + if (startTimeMillis != null) { + return System.currentTimeMillis(); + } + return null; + } } diff --git a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/load/EntityLineageResultResolver.java b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/load/EntityLineageResultResolver.java index 51b00bbe7b..d872ffad27 100644 --- a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/load/EntityLineageResultResolver.java +++ b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/load/EntityLineageResultResolver.java @@ -18,6 +18,7 @@ import com.linkedin.datahub.graphql.generated.LineageDirection; import com.linkedin.datahub.graphql.generated.LineageInput; import com.linkedin.datahub.graphql.generated.LineageRelationship; import com.linkedin.datahub.graphql.generated.Restricted; +import com.linkedin.datahub.graphql.resolvers.ResolverUtils; import com.linkedin.datahub.graphql.types.common.mappers.UrnToEntityMapper; import com.linkedin.metadata.graph.SiblingGraphService; import graphql.schema.DataFetcher; @@ -63,7 +64,10 @@ public class EntityLineageResultResolver @Nullable final Integer count = input.getCount(); // Optional! @Nullable final Boolean separateSiblings = input.getSeparateSiblings(); // Optional! @Nullable final Long startTimeMillis = input.getStartTimeMillis(); // Optional! - @Nullable final Long endTimeMillis = input.getEndTimeMillis(); // Optional! + @Nullable + final Long endTimeMillis = + ResolverUtils.getLineageEndTimeMillis( + input.getStartTimeMillis(), input.getEndTimeMillis()); // Optional! com.linkedin.metadata.graph.LineageDirection resolvedDirection = com.linkedin.metadata.graph.LineageDirection.valueOf(lineageDirection.toString()); diff --git a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/ScrollAcrossLineageResolver.java b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/ScrollAcrossLineageResolver.java index 14b2d3b8f8..1b719b6f78 100644 --- a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/ScrollAcrossLineageResolver.java +++ b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/ScrollAcrossLineageResolver.java @@ -78,7 +78,8 @@ public class ScrollAcrossLineageResolver @Nullable Long startTimeMillis = input.getStartTimeMillis() == null ? null : input.getStartTimeMillis(); @Nullable - Long endTimeMillis = input.getEndTimeMillis() == null ? null : input.getEndTimeMillis(); + Long endTimeMillis = + ResolverUtils.getLineageEndTimeMillis(input.getStartTimeMillis(), input.getEndTimeMillis()); final LineageFlags lineageFlags = LineageFlagsInputMapper.map(context, input.getLineageFlags()); if (lineageFlags.getStartTimeMillis() == null && startTimeMillis != null) { diff --git a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/SearchAcrossLineageResolver.java b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/SearchAcrossLineageResolver.java index f342d251ac..dc3a1fc17e 100644 --- a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/SearchAcrossLineageResolver.java +++ b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/SearchAcrossLineageResolver.java @@ -111,7 +111,8 @@ public class SearchAcrossLineageResolver @Nullable Long startTimeMillis = input.getStartTimeMillis() == null ? null : input.getStartTimeMillis(); @Nullable - Long endTimeMillis = input.getEndTimeMillis() == null ? null : input.getEndTimeMillis(); + Long endTimeMillis = + ResolverUtils.getLineageEndTimeMillis(input.getStartTimeMillis(), input.getEndTimeMillis()); final LineageFlags lineageFlags = LineageFlagsInputMapper.map(context, input.getLineageFlags()); if (lineageFlags.getStartTimeMillis() == null && startTimeMillis != null) { diff --git a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/types/common/mappers/LineageFlagsInputMapper.java b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/types/common/mappers/LineageFlagsInputMapper.java index 43c24c9630..87664ef2af 100644 --- a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/types/common/mappers/LineageFlagsInputMapper.java +++ b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/types/common/mappers/LineageFlagsInputMapper.java @@ -6,6 +6,7 @@ import com.linkedin.common.urn.UrnUtils; import com.linkedin.datahub.graphql.QueryContext; import com.linkedin.datahub.graphql.generated.EntityTypeToPlatforms; import com.linkedin.datahub.graphql.generated.LineageFlags; +import com.linkedin.datahub.graphql.resolvers.ResolverUtils; import com.linkedin.datahub.graphql.types.entitytype.EntityTypeMapper; import com.linkedin.datahub.graphql.types.mappers.ModelMapper; import java.util.Collections; @@ -42,12 +43,16 @@ public class LineageFlagsInputMapper if (lineageFlags.getIgnoreAsHops() != null) { result.setIgnoreAsHops(mapIgnoreAsHops(lineageFlags.getIgnoreAsHops())); } - if (lineageFlags.getEndTimeMillis() != null) { - result.setEndTimeMillis(lineageFlags.getEndTimeMillis()); - } if (lineageFlags.getStartTimeMillis() != null) { result.setStartTimeMillis(lineageFlags.getStartTimeMillis()); } + // Default to "now" if no end time is provided, but start time is provided. + Long endTimeMillis = + ResolverUtils.getLineageEndTimeMillis( + lineageFlags.getStartTimeMillis(), lineageFlags.getEndTimeMillis()); + if (endTimeMillis != null) { + result.setEndTimeMillis(endTimeMillis); + } if (lineageFlags.getEntitiesExploredPerHopLimit() != null) { result.setEntitiesExploredPerHopLimit(lineageFlags.getEntitiesExploredPerHopLimit()); }