Repository navigation
Conversation
… pipeline list reads TestSuiteRepository and IngestionPipelineRepository name their parent through getParentReference, which sends list reads down the bulk inheritance path. That path loads the parent with getInheritableFields() and applies applyInheritance(), whose defaults cover domains and tags only, so a listed basic suite lost its table's owners and a listed pipeline lost its service's owners. A GET by id still inherited them through the per-entity setInheritedFields. Load owners on the parent and inherit them in applyInheritance, as Table, DatabaseSchema and StoredProcedure already do. New ITs cover the test suite list, the test suite search/list used by the Data Quality page, and the pipeline list.
Code Review ✅ Approved🟡 Medium risk · Repository list reads now inherit owners and tags for test suites and ingestion pipelines, which could show incorrect ownership or propagated metadata. Overrides VerificationRules No rules evaluated Functional validation Not enabledAuto-approval Not enabledFor more verification details, comment OptionsDisplay: compact → Showing compact verification results. Comment with these commands to change the behavior for this request:
Was this helpful? React with 👍 / 👎 | Powered by Gitar — free for open source |
❌ PR checklist incompleteThis PR cannot be merged until the following are addressed on its linked issue:
The fields live on the linked issue in the Shipping project (open the issue → right sidebar → Projects). After you set them, re-run this check (or push a commit) — issue/project changes do not re-trigger it automatically. Maintainers can bypass this check by adding the |
|
Local Java test run: FAILED — details
Failed: Tests run locally
Per-class counts come from the test reports, which can credit a test to the wrong class when classes run concurrently, and keep only the last run of a nested class that several test classes inherit. The summary's step totals are Maven's own counts. integration · mysql-elasticsearch · parallel: 51 classes
Why these tests
Commandsmvn -B package -pl openmetadata-service -am -Dspring-boot.repackage.skip=true -Dtest=DataContractPipelineTokenRefreshTest,IngestionLogStreamFactoryTest,IngestionPipelineRepositoryTest,IngestionPipelineResourceDeleteTest,IngestionPipelineResourceStatusTest,IngestionPipelineSecretsTest,IngestionPipelineSortCursorTest,IngestionPipelineStaleQueuedStatusTest,IngestionPipelineStatusIndexTest,IngestionPipelineTriggeredByTest,OpenMetadataConnectionBuilderTest,ReindexingUtilDocBuildContextTest,RunIngestionPipelineImplTest,SearchIndexFactoryTest,SearchRepositoryTest,TestSuiteIndexTest,TestSuiteRepositoryTest -Dsurefire.failIfNoSpecifiedTests=false
mvn -B verify -pl :openmetadata-integration-tests -am -Dspring-boot.repackage.skip=true -Pmysql-elasticsearch -DintegrationTests.lane=parallel '-Dit.test=<50 classes>' -Dfailsafe.failIfNoSpecifiedTests=false -Dtest=NoUnitTestsInThisRun -Dsurefire.failIfNoSpecifiedTests=false
mvn -B verify -pl :openmetadata-integration-tests -am -Dspring-boot.repackage.skip=true -Pmysql-elasticsearch -DintegrationTests.lane=global-state -Dit.test=AppsResourceIT,DataContractValidationAppIT,TestSuiteReindexIT,WorkflowDefinitionResourceIT -Dfailsafe.failIfNoSpecifiedTests=false -Dtest=NoUnitTestsInThisRun -Dsurefire.failIfNoSpecifiedTests=false
mvn -B verify -pl :openmetadata-integration-tests -am -Dspring-boot.repackage.skip=true -Psearch-it -DdatabaseType=postgres -DsearchType=opensearch -Djpw.data.mode=ingest -Dit.test=TestCaseStaleDefinitionReindexIT -Dfailsafe.failIfNoSpecifiedTests=false -Dtest=NoUnitTestsInThisRun -Dsurefire.failIfNoSpecifiedTests=false |
🚦 Removed from the merge queue —
|
Describe your changes:
Fixes #35485
A basic test suite inherits its table's owners, and an ingestion pipeline inherits its service's owners. Fetching either by id still returned the inherited owner, but the list endpoints returned
owners: []:GET /v1/dataQuality/testSuites?fields=ownersGET /v1/dataQuality/testSuites/search/list?fields=owners, which backs the Data Quality pageGET /v1/services/ingestionPipelines?fields=owners&service=<fqn>Cause. #25751 added
getParentReferencetoTestSuiteRepositoryandIngestionPipelineRepository. That sends list reads through the bulk path inEntityRepository.setInheritedFields(List, Fields), which loads each parent withgetInheritableFields()and appliesapplyInheritance(). Both defaults cover domains and tags only, and neither repository overrode them, so owners were dropped on every list read. A GET by id goes through the per-entitysetInheritedFields, which does inherit owners. The existing ITs only covered that path, so the regression went unnoticed.Fix. Both repositories now override
getInheritableFields()to loadowners,domainsand inherit owners inapplyInheritance()before callingsuper. This is howTableRepository,DatabaseSchemaRepositoryandStoredProcedureRepositoryalready work.Effects of the fix:
super.applyInheritance()also inherits tags, these list reads now pick up propagated tags when tag propagation is on. Other entities already behave this way; the per-entity path for these two still doesn't.Type of change:
High-level design:
N/A — small change: two repository overrides plus tests.
Tests:
Use cases covered
inherited: true.search/listreturns a basic suite with its table's owner, markedinherited: true.inherited: true.Unit tests
TestSuiteRepositoryTest,IngestionPipelineRepositoryTest,TestSuiteIndexTest) pass; see the block below.Backend integration tests
openmetadata-integration-tests/for the changed list endpoints.TestSuiteResourceIT:list_basicSuiteInheritsTableOwner,searchList_basicSuiteInheritsTableOwnerIngestionPipelineOwnerInheritanceIT:test_listedPipelinesInheritServiceOwnertable owner missing from [](both test-suite tests; the search one after its 2-minute wait)Service owner missing from listed pipeline owners [](pipelines)test_inheritOwnerFromTable,test_inheritedOwners_fromService) passed in both runs.Local Java test run: FAILED
bda19964bdd9(baseupstream/main)Failed:
TestCaseStaleDefinitionReindexIT#brokenTestDefinitionRelationshipIsReportedNotSilentlyDropped(TestNamespace)Ingestion integration tests
Playwright (UI) tests
Manual testing performed
No separate manual run. The ITs above make the same HTTP calls a user would, against a real MySQL + Elasticsearch stack:
PUT.GET /v1/dataQuality/testSuites?fields=owners&testSuiteType=basic,GET /v1/dataQuality/testSuites/search/list?fields=owners&fullyQualifiedName=<suite fqn>, andGET /v1/services/ingestionPipelines?fields=owners&service=<service fqn>each return the parent's owner withinherited: true. Before the fix they returnedowners: [].UI screen recording:
Not applicable — backend-only fix; no UI code changes.
Checklist:
I have read the CONTRIBUTING document.
My PR title is
Fixes <issue-number>: <short explanation>My PR is linked to a GitHub issue via
Fixes #<issue-number>above.I have commented on my code, particularly in hard-to-understand areas. — Not applicable: the overrides follow an existing pattern and need no comment.
For JSON Schema changes: I updated the migration scripts or explained why it is not needed. — Not applicable: no schema changes.
For a UI feature or feature task: … — Not applicable: backend-only.
I have added tests (unit / integration / Playwright as applicable) and listed them above.
Decision check — Not applicable: this restores existing behavior and adds no new contract, default or rule.
I have added a test that covers the exact scenario we are fixing. For complex issues, comment the issue number in the test for future reference.
🤖 Generated with Claude Code