#33528·OpenMetadata

Salvage from #33248: the standalone PRs worth landing on main

Author: harshachCreated Sep 17, 2026Updated Sep 18, 2026

Sub-issue of #32946. Tracks the standalone PRs that salvage the good parts of the closed PR #33248 (branch harshach/split-entity-repo) and its Collate companion open-metadata/openmetadata-collate#6639 (branch harshach/entity-module-compat).

Do not delete either branch — they are the source of every hunk below. And do not cherry-pick whole files or whole commits: the OSS branch carries a repo-wide automated comment reflow that damaged comments in PatchEntityTool.java, FieldPathUtils.java and EntityUtil.java and stripped ~800 comment lines from BaseEntityIT. Every port is hunk-level, taken from git diff origin/main...harshach/split-entity-repo -- <file>.

Plan and rationale: docs/plans/2026-09-17-entity-repository-epic.md (#33516).

Wave A — no dependencies

  • Epic docs PR — #33516 (merged)
  • Close #33248 and open-metadata/openmetadata-collate#6639
  • Sub-issues under #32946 — #33517 #33518 #33519 #33520 #33521 #33522 #33523 #33524 #33525 #33526 #33527
  • B1 Painless tag re-separation script redeclares def newTags/tier/classTags/glossTags, so a tag replacement fails with "Variable [newTags] is already defined" — issue #33530, PR #33532 (merged)
  • B2 description.index_options is docs/freqs in 5 index mappings, so phrase/Contains queries cannot match — issue #33542, PR #33543
  • B3 RDF indexing drops tableConstraints/profile/pipelineStatus/usageSummary, starving their dedicated mappers — issue #33531, PR #33533 (merged)
  • B5 SearchSettingsMergeUtil resolves SystemRepository at class load; CachedEntityDao evicts the two aliases with two DELs — issue #33538, PR #33540
  • T1 JDBI test decorators: SqlQueryCounter, SqlFailureProbe (+ a forRequests variant), TransactionCounter — issue #33537, PR #33539. Prerequisite for every SQL-count and commit-count assertion below
  • U1 Guided tour skips the real permission fetch for the tour dataset — issue #33548, PR #33550
  • U2 Playwright flake fixes: reindex schedule in entity-data.setup.ts, SPARQL ASK poll in KnowledgeGraph.spec.ts, GlobalPageSize, LineageFilters — issue #33549, PR #33551
  • U3 CI shard capacity COMMON_MAX_SHARDS 28 → 32dropped, not justified on current main. The checked-in full-run baseline (sourceRunId 34109980157) puts chromium at 62,673 worker-seconds, a lower bound of 22 shards at 3 workers / 0.85 efficiency / 19-min budget, against the current cap of 28. The branch's rationale claimed ~84,600 worker-seconds needing 30; that is not reproducible from anything in the repo. No recent main run has hit the "needs more than 28 shards" abort, and the file's own policy says to split heavy suites before raising the cap — which is what #33296 did. Re-open if planning actually aborts; the error message will carry the real number.
  • I1 test_validations_datalake.py fixture dates relative to EXECUTION_DATE + freeze_time — issue #33544, PR #33546. Note: no assertion reads inserted_date today, so this is determinism hardening, not a reproduced flake. freezegun confirmed present in ingestion/setup.py test extras.
  • M1 MCP: drop unused okhttp3:mockwebserver, run IdTokenValidatorTest on the JDK HttpServer — issue #33545, PR #33547

Wave B — after T1 merges

  • P1 Table + column custom metrics and column extensions: 505 → 5 SQL — #33353
  • P2 Column pages resolve owners only when profile is requested: 20 → 0 — #33524
  • B4 Chart/Dashboard updaters delete and re-insert every HAS relationship before checking for change
  • T2 Transaction ITs, first wave — reconcile with #33358, do not duplicate it
  • T4 Multi-node IT isolation: secondary cluster nodes in a forked JVM
  • T5 Zero-edit guards: LineageHydratorTest, DefaultTemplateProvider decoupling, TestCaseResourceIT, EntityDeleteTaskCleanupIT, McpServiceResourceIT, KnowledgePageResourceIT
  • C1 (Collate) DataInsightDashboardRepository.deleteDashboardChart runs as two autocommits — the bug #33248's tests found
  • C2 (Collate) Slack "Test details" modal lists every test case with fields=* (57 SQL)
  • C3 (Collate) Argo/MinIO dev-stack repair

Wave C

  • P3 patchChangeSummary rewrites the whole entity JSON per accepted suggestion
  • P4 Owners + domains for auth enrichment in one UNION ALL — #33524
  • P7 Request cache: one serialization feeds both aliases — #33525
  • P6 Pipelined bulk cache publication (putMany, 100-key batches) — #33525
  • T3 Transaction ITs, second wave — assertions that encode refactor-only behaviour become sub-issues, not tests
  • T6 scripts/jacoco_class_coverage.py per-class coverage gate (optional)
  • P5 Read-bundle partial fill + compare-and-swap publish — #33525, lands last

Already filed from this effort

#33353, #33358, #33359, #33360, #33361 — opened 2026-09-15 by porting #33248's atomicity tests onto main at 500d929694. #33359, #33360 and #33361 are bugs in main that the port uncovered.

Not salvaged

The 147 component-only unit-test files, the it/perf/** latency harness and scripts/entity_api_{acceptance,benchmark}.py, scripts/entity_repository_size.py, the six docs/entity-repository-*.md (mined for the pain list), EntityDependentCleanupIT, every API rename in resources/migrations/MCP tools, and the h2 test dependency.

Already on main, nothing to port: searchForCompleteExportResponse (#33079), the version-history empty-terminal-page cursor fix (#33016), LineageHydrator.

Source: open-metadata/OpenMetadata