OpenLineage : Add core lineage service scaffolding#4705
Conversation
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Introduces a new lineage service boundary and supporting models/configuration, gated behind static and realm feature flags, with a placeholder persistence implementation.
Changes:
- Adds core lineage API models (ingest/query requests, graph/node/edge types) and SPI (
LineagePersistence,LineageService). - Implements
DefaultLineageServicewith enablement checks (static config + realm feature + persistence flag) and adds a disabled persistence placeholder. - Adds unit tests for enablement gating and persistence delegation, and introduces a new realm feature flag
ENABLE_LINEAGE.
Reviewed changes
Copilot reviewed 20 out of 20 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| runtime/service/src/test/java/org/apache/polaris/service/lineage/DefaultLineageServiceTest.java | Adds unit coverage for lineage enablement checks and delegation to persistence. |
| runtime/service/src/main/java/org/apache/polaris/service/lineage/LineageConfiguration.java | Adds SmallRye config mapping for lineage feature and persistence toggles. |
| runtime/service/src/main/java/org/apache/polaris/service/lineage/DisabledLineagePersistence.java | Adds placeholder LineagePersistence that fails fast when invoked. |
| runtime/service/src/main/java/org/apache/polaris/service/lineage/DefaultLineageService.java | Adds request-scoped lineage service implementation and enablement gates. |
| polaris-core/src/main/java/org/apache/polaris/core/lineage/LineageService.java | Defines a core service boundary for lineage operations. |
| polaris-core/src/main/java/org/apache/polaris/core/lineage/LineageQueryRequest.java | Adds request model for lineage graph queries. |
| polaris-core/src/main/java/org/apache/polaris/core/lineage/LineagePersistence.java | Adds persistence SPI contract for lineage backends. |
| polaris-core/src/main/java/org/apache/polaris/core/lineage/LineageNodeType.java | Adds enum for node kinds in lineage graphs. |
| polaris-core/src/main/java/org/apache/polaris/core/lineage/LineageNode.java | Adds node model for lineage graph responses. |
| polaris-core/src/main/java/org/apache/polaris/core/lineage/LineageIngestRequest.java | Adds normalized ingest payload model. |
| polaris-core/src/main/java/org/apache/polaris/core/lineage/LineageGraph.java | Adds normalized lineage query response model. |
| polaris-core/src/main/java/org/apache/polaris/core/lineage/LineageGranularity.java | Adds enum for dataset vs column granularity queries. |
| polaris-core/src/main/java/org/apache/polaris/core/lineage/LineageFieldReference.java | Adds model for dataset field references used in column edges. |
| polaris-core/src/main/java/org/apache/polaris/core/lineage/LineageFieldMapping.java | Adds mapping model for column-granularity responses. |
| polaris-core/src/main/java/org/apache/polaris/core/lineage/LineageEdge.java | Adds dataset-to-dataset edge model. |
| polaris-core/src/main/java/org/apache/polaris/core/lineage/LineageDirection.java | Adds enum for query direction. |
| polaris-core/src/main/java/org/apache/polaris/core/lineage/LineageDataset.java | Adds dataset identity model for lineage. |
| polaris-core/src/main/java/org/apache/polaris/core/lineage/LineageData.java | Adds response metadata wrapper for datasets. |
| polaris-core/src/main/java/org/apache/polaris/core/lineage/LineageColumnEdge.java | Adds column-level edge model. |
| polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java | Adds realm feature flag ENABLE_LINEAGE. |
| public LineageGraph { | ||
| Objects.requireNonNull(node, "node must be non-null"); | ||
| upstream = List.copyOf(upstream); | ||
| downstream = List.copyOf(downstream); | ||
| } |
| public LineageNode { | ||
| Objects.requireNonNull(id, "id must be non-null"); | ||
| Objects.requireNonNull(type, "type must be non-null"); | ||
| fieldMappings = List.copyOf(fieldMappings); | ||
| } |
| if (!callContext.getRealmConfig().getConfig(FeatureConfiguration.ENABLE_LINEAGE)) { | ||
| throw new UnsupportedOperationException( | ||
| "Feature not enabled: " + FeatureConfiguration.ENABLE_LINEAGE.key()); | ||
| } |
|
Thanks for this @iting0321! I think we are trying to, however, do too much in this PR itself. Can we remove the Persistence-related models, as we may need a bit more time to close consensus on those bits? I understand that there will be no callers of these models as a result, but we will still need this in case of both persistence and passthrough models regardless. Given that nothing in here would be considered a "public interface" IMO, we should be ok to change it later down the line, if needed. |
I just removed the Persistence-related models (including ingest model). |
Description
This PR introduces the core query/response models, a
LineageServiceboundary, runtime service/config wiring, and disabled-by-default feature guards. It does not add persistence, ingest parsing, REST endpoints, RBAC, or forwarding.Changes
polaris-corelineage query/response models for query requests, graph responses, nodes, node data, field mappings, direction,granularity, and node type inpolaris-core/.../lineage/.LineageServicequery boundary inpolaris-core/.../lineage/.DefaultLineageServiceandLineageConfigurationinruntime/service/.../lineage/.ENABLE_LINEAGEfeature flag, defaulting to disabled, inpolaris-core/.../config/FeatureConfiguration.java.polaris.lineage.enabledinsite/content/in-dev/unreleased/configuration/config-sections/.runtime/service/.../DefaultLineageServiceTest.java.Out of Scope
Checklist
CHANGELOG.md(if needed)site/content/in-dev/unreleased(if needed)