Fixes 32946: Replace entity repository inheritance with composition - #33248
Fixes 32946: Replace entity repository inheritance with composition#33248harshach wants to merge 14 commits into
Conversation
Compose Java 21 entity policies and shared read, mutation, history, bulk, deletion and cache services, and migrate REST, MCP and background consumers. Preserve owning transaction boundaries, retry replay and Redis publication while batching metadata lookups and reusing canonical serialized rows. Add regression suites, API benchmark protocols and architecture, extension migration and performance documentation. Keep the unresolved latency and changed-class coverage acceptance gates explicit.
|
Too many files changed for review (904 files, 100 file limit). |
Port upstream certification, history, column-lineage and Context Center changes to the composed entity services. Retain owning transaction boundaries and deferred cache/search effects.
✅ Playwright Results — workflow succeededValidated commit ✅ 4503 passed · ❌ 0 failed · 🟡 3 flaky · ⏭️ 1 skipped · 🧰 0 lifecycle flaky PerformanceBlocking targets: ✅ met · Optimization targets: 🟡 in progress Shard-job maxima below are not the full workflow wall time; the linked run includes build, fixture, planning, and reporting. 🕒 Full workflow signal wall (to summary) 1h 5m 1s ⏱️ Max setup 5m 47s · max shard execution 24m 49s · max shard-job elapsed before upload 28m 11s · reporting 21s 🌐 218.89 requests/attempt · 2.24 app boots/UI scenario · 46.00% common-shard skew Optimization targets still in progress:
🟡 3 flaky test(s) (passed on retry)
How to debug locally# Download playwright-test-results-<shard> artifact and unzip
npx playwright show-trace path/to/trace.zip # view trace |
|
| Count | Rule |
|---|---|
| 15 | react-hooks/exhaustive-deps |
| 1 | openmetadata-imports/no-cross-page-imports |
All findings
| Location | Rule | Message | |
|---|---|---|---|
| 🟡 | src/pages/TableDetailsPageV1/TableDetailsPageV1.tsx:111:1 |
openmetadata-imports/no-cross-page-imports |
Page features must not import another page feature. Move shared code to components, hooks, interfaces, or pure utilities. |
| 🟡 | src/pages/TableDetailsPageV1/TableDetailsPageV1.tsx:168:6 |
react-hooks/exhaustive-deps |
React Hook useMemo has a missing dependency: 't'. Either include it or remove the dependency array. |
| 🟡 | src/pages/TableDetailsPageV1/TableDetailsPageV1.tsx:217:6 |
react-hooks/exhaustive-deps |
React Hook useEffect has a missing dependency: 't'. Either include it or remove the dependency array. |
| 🟡 | src/pages/TableDetailsPageV1/TableDetailsPageV1.tsx:442:6 |
react-hooks/exhaustive-deps |
React Hook useMemo has an unnecessary dependency: 'tableDetails.tags'. Either exclude it or remove the dependency array. |
| 🟡 | src/pages/TableDetailsPageV1/TableDetailsPageV1.tsx:466:6 |
react-hooks/exhaustive-deps |
React Hook useEffect has a missing dependency: 'setDqLineageData'. Either include it or remove the dependency array. |
| 🟡 | src/pages/TableDetailsPageV1/TableDetailsPageV1.tsx:512:9 |
react-hooks/exhaustive-deps |
The 'onTableUpdate' function makes the dependencies of useCallback Hook (at line 668) change on every render. To fix this, wrap the definition of 'onTableUpdate |
| 🟡 | src/pages/TableDetailsPageV1/TableDetailsPageV1.tsx:512:9 |
react-hooks/exhaustive-deps |
The 'onTableUpdate' function makes the dependencies of useCallback Hook (at line 684) change on every render. To fix this, wrap the definition of 'onTableUpdate |
| 🟡 | src/pages/TableDetailsPageV1/TableDetailsPageV1.tsx:539:5 |
react-hooks/exhaustive-deps |
React Hook useCallback has a missing dependency: 'onTableUpdate'. Either include it or remove the dependency array. |
| 🟡 | src/pages/TableDetailsPageV1/TableDetailsPageV1.tsx:553:5 |
react-hooks/exhaustive-deps |
React Hook useCallback has a missing dependency: 'onTableUpdate'. Either include it or remove the dependency array. |
| 🟡 | src/pages/TableDetailsPageV1/TableDetailsPageV1.tsx:613:6 |
react-hooks/exhaustive-deps |
React Hook useMemo has missing dependencies: 'customizedPage?.tabs' and 'feedCount'. Either include them or remove the dependency array. |
| 🟡 | src/pages/TableDetailsPageV1/TableDetailsPageV1.tsx:640:5 |
react-hooks/exhaustive-deps |
React Hook useMemo has a missing dependency: 'tabs'. Either include it or remove the dependency array. |
| 🟡 | src/pages/TableDetailsPageV1/TableDetailsPageV1.tsx:640:6 |
react-hooks/exhaustive-deps |
React Hook useMemo has a complex expression in the dependency array. Extract it to a separate variable so it can be statically checked. |
| 🟡 | src/pages/TableDetailsPageV1/TableDetailsPageV1.tsx:815:6 |
react-hooks/exhaustive-deps |
React Hook useCallback has a missing dependency: 'navigate'. Either include it or remove the dependency array. |
| 🟡 | src/pages/TableDetailsPageV1/TableDetailsPageV1.tsx:819:5 |
react-hooks/exhaustive-deps |
React Hook useCallback has a missing dependency: 'navigate'. Either include it or remove the dependency array. |
| 🟡 | src/pages/TableDetailsPageV1/TableDetailsPageV1.tsx:891:6 |
react-hooks/exhaustive-deps |
React Hook useEffect has missing dependencies: 'fetchActivityCount', 'fetchTaskCounts', and 'setTableDetails'. Either include them or remove the dependency arra |
| 🟡 | src/pages/TableDetailsPageV1/TableDetailsPageV1.tsx:906:6 |
react-hooks/exhaustive-deps |
React Hook useEffect has missing dependencies: 'getTestCaseFailureCount' and 'tableDetails'. Either include them or remove the dependency array. |
Fix locally (fast - only checks files changed in this branch):
make ui-checkstyle-changed
Code Review 👍 Approved with suggestions 0 resolved / 1 findingsRefactors entity repository from 13,569-line inheritance hierarchy to 209 composed components, migrating repository/updater/service policies across REST, MCP, search, RDF, CSV and workflow consumers while retaining Redis caching and reducing repeated metadata queries. Consider removing the redundant completeness check in 💡 Quality: Redundant completeness check after export retry helper📄 openmetadata-service/src/main/java/org/openmetadata/service/search/opensearch/OpenSearchSearchManager.java:1491-1496 📄 openmetadata-service/src/main/java/org/openmetadata/service/search/opensearch/OpenSearchSearchManager.java:1531-1545 📄 openmetadata-service/src/main/java/org/openmetadata/service/search/elasticsearch/ElasticSearchSearchManager.java:1419-1424 In both search managers, 🤖 Prompt for agentsOptionsDisplay: compact → Counting what did not apply, without listing it. Comment with these commands to change the behavior for this request:
Was this helpful? React with 👍 / 👎 | Powered by Gitar — free for open source |
|
|



Describe your changes:
Fixes #32946
Replace the 13,569-line
EntityRepositorywith 209 composed components and migrate repository, updater, service and application consumers while preserving REST contracts, Redis caching and transaction ownership.Type of change:
High-level design:
Seven startup assemblies bind Java 21 records, read/write services and ordered mutation policies around the retained DAO graph, preserving one owning transaction per existing flush, nested rollback, deadlock replay and deferred cache/search effects.
Java extensions migrate through the Collate companion, with the design, migration guide, verification status and performance evidence documenting the boundaries and coordinated rollout.
Open acceptance gates: repeatable API latency and the complete database/cache/width/load/allocation matrix, 90% coverage for every changed executable class, and CI on the current native and companion revisions
Tests:
Use cases covered
Unit tests
LineageHydratorline coverage rises from 4.26% to 97.16%SlackComponentsreaches 97.04% line coverageBackend integration tests
49d929039749d9290397/ Collate4def2335b1: backend and governance/data access passed; all 37 applicable companion checks passed1f52c5930b/ Collate8c0096662a: automatic CI pending; current-revision coordinated CI remains an open gateIngestion integration tests
Playwright (UI) tests
Performance validation
854c3d28…, original306263df…; Java 21, fixed 1 GB G1 heaps, durable PostgreSQL 16/MySQL 8.3, OpenSearch 3.4 and Redis 7Manual testing performed
UI screen recording / screenshots:
Production-bundle Help-entry guided tour, including profiler step 13
Checklist:
49d9290397/4def2335b1Native wrappers still dispatch Collate
main, so both PRs require a coordinated rollout after the acceptance gates pass.