Skip to content

Fixes #26674: improve PATCH table API performance - deduplicate lineage ops and optimize column matching #26848

Open
khoaihps wants to merge 14 commits intoopen-metadata:mainfrom
khoaihps:khoaihps-fix/improve-patch-table-api
Open

Fixes #26674: improve PATCH table API performance - deduplicate lineage ops and optimize column matching #26848
khoaihps wants to merge 14 commits intoopen-metadata:mainfrom
khoaihps:khoaihps-fix/improve-patch-table-api

Conversation

@khoaihps
Copy link
Copy Markdown

@khoaihps khoaihps commented Mar 30, 2026

Describe your changes:

Fixes #26674

The PATCH /api/v1/tables/{id} endpoint was taking 49–99 seconds per request during Database Service ingestion workflows. Profiling showed ~99% of time spent in internal processing, with lineage-related OpenSearch operations executing 2–4× per request and blocking until all shards refreshed.

Three root causes were identified:

1. Duplicate deferred lineage operations
When consolidateChanges=true, updateInternal() runs multiple times within a single request. Each run was independently calling deferReactOperation() for column rename/delete lineage cleanup, resulting in the same updateByQuery being fired 2–4× against 13,000+ documents per request.

2. Blocking index refresh on lineage updateByQuery calls
Both Elasticsearch and OpenSearch updateByQuery calls used refresh=true, which forces a shard refresh and blocks the request thread until all shards complete. With 13,275+ documents being updated, this caused ~90-second stalls per operation. Since the table_search_index relies on the default index.refresh_interval (1 second), setting refresh=false allows the engine to apply changes asynchronously within the next refresh cycle — which is acceptable for lineage cleanup, as there is no requirement for immediate read-after-write consistency here.

3. Lineage operations scanned the entire cluster
updateColumnsInUpstreamLineage and deleteColumnsInUpstreamLineage were using GLOBAL_SEARCH_ALIAS ("all") — an alias that spans every index in the cluster (~30+ indices). Column-level lineage (upstreamLineage.columns) is only stored in 8 entity indices: table, topic, container, dashboard_data_model, search_entity, api_endpoint, mlmodel, and dashboard. Running updateByQuery against all indices was scanning irrelevant shards, wasting I/O and cluster resources.

Bonus: O(n²) column matching
ColumnEntityUpdater was calling origColumns.stream().filter(columnMatch).findAny() inside a loop over updatedColumns, resulting in O(n²) comparisons on wide tables.

What

  • TableRepository.java — Replace per-call deferReactOperation() with a single deferred flush via flushPendingColumnLineageSearchUpdates(). entitySpecificUpdate() clears pendingDeletedColumnFqns/pendingRenameColumnFqns once per updateInternal() pass; handleColumnLineageUpdates() accumulates into them across all recursive column-level calls. A columnLineageUpdateDeferred boolean ensures the flush is registered exactly once regardless of how many passes consolidation runs.

  • SearchClient.java — Add COLUMN_LINEAGE_SEARCH_INDICES constant: a comma-separated list of the 8 indices that store upstreamLineage.columns. SearchRepository.getIndexOrAliasName() already handles comma-separated index names, so no lower-level changes are needed.

  • TableRepository.java — Switch from GLOBAL_SEARCH_ALIAS ("all") to COLUMN_LINEAGE_SEARCH_INDICES for all column lineage search operations, targeting only the indices that can contain column lineage data.

  • ElasticSearchEntityManager.java / OpenSearchEntityManager.java — Change refresh=truerefresh=false on both updateColumnsInUpstreamLineage and deleteColumnsInUpstreamLineage. The table_search_index has no explicit index.refresh_interval configured, so it uses the OpenSearch/Elasticsearch default of 1 second. Column lineage cleanup changes will be visible within that window, which is sufficient — no caller requires immediate post-PATCH search consistency for renamed or deleted columns.

  • EntityRepository.java — Replace O(n²) column matching with a HashMap<ColumnKey, Column> lookup, where ColumnKey is a record(name, dataType, arrayDataType). Using a record avoids delimiter-collision bugs that would arise from string concatenation, and reduces matching from O(n²) to O(n).

    How to test

    1. Create a Database Service with 1,300+ tables and 700+ lineage entries.
    2. Run an ingestion workflow or directly PATCH a table with column lineage.
    3. Verify PATCH response time is no longer in the 49–99s range.
    4. Verify column rename/delete lineage updates are reflected correctly in OpenSearch/Elasticsearch within ~1 second.

Type of change:

  • Bug fix
  • Improvement
  • New feature
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation

Checklist:

  • I have read the CONTRIBUTING document.
  • My PR title is Fixes <issue-number>: <short explanation>
  • I have commented on my code, particularly in hard-to-understand areas.
  • For JSON Schema changes: I updated the migration scripts or explained why it is not needed.
  • I have added a test that covers the exact scenario we are fixing.
    test_deletedColumnLineagePropagatesInSearch in TableResourceIT verifies that after a column is removed from a table, the column lineage reference is cleaned up in the search index within the default refresh interval.

Copilot AI review requested due to automatic review settings March 30, 2026 07:39
@github-actions
Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

@khoaihps khoaihps force-pushed the khoaihps-fix/improve-patch-table-api branch from 394e4aa to 008a02a Compare March 30, 2026 07:42
@github-actions
Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Improves performance of PATCH /api/v1/tables/{id} by reducing redundant lineage search updates, avoiding expensive search refresh blocking on column-lineage cleanup, and optimizing column matching during entity updates.

Changes:

  • Deduplicates deferred column-lineage search updates in TableRepository and targets table_search_index instead of the global "all" alias.
  • Sets refresh=false on upstream-lineage column deletion updateByQuery calls for both Elasticsearch and OpenSearch clients.
  • Optimizes ColumnEntityUpdater.updateColumns() matching by using a prebuilt lookup map instead of an O(n²) stream search.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

File Description
openmetadata-service/src/main/java/org/openmetadata/service/search/opensearch/OpenSearchEntityManager.java Disables blocking shard refresh for column-lineage deletion update-by-query.
openmetadata-service/src/main/java/org/openmetadata/service/search/elasticsearch/ElasticSearchEntityManager.java Disables blocking shard refresh for column-lineage deletion update-by-query.
openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TableRepository.java Accumulates and flushes column-lineage search updates once; switches lineage ops to table_search_index.
openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java Replaces per-column stream search with O(n) lookup for matching stored vs updated columns.

@github-actions
Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

Copilot AI review requested due to automatic review settings March 30, 2026 08:13
@github-actions
Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.

@khoaihps khoaihps force-pushed the khoaihps-fix/improve-patch-table-api branch from f206363 to ea7b5db Compare March 30, 2026 08:25
@github-actions
Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

Copilot AI review requested due to automatic review settings March 30, 2026 08:29
@github-actions
Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

@github-actions
Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

Copilot AI review requested due to automatic review settings March 30, 2026 09:10
@github-actions
Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

@github-actions
Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

Copilot AI review requested due to automatic review settings March 30, 2026 09:48
@github-actions
Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

Copilot AI review requested due to automatic review settings March 30, 2026 11:13
@khoaihps khoaihps force-pushed the khoaihps-fix/improve-patch-table-api branch from dcb19ae to 959de76 Compare March 30, 2026 11:13
@github-actions
Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.

@github-actions
Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

Copilot AI review requested due to automatic review settings March 30, 2026 11:30
@github-actions
Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 4 comments.

Comment on lines +874 to +877
// unless configured otherwise)
// instead
// of forcing a blocking shard refresh after each updateByQuery. Lineage
// cleanup does not require immediate read-after-write consistency.
Copy link

Copilot AI Mar 30, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment formatting issue here: the refresh=false rationale is broken across lines with a standalone // instead. Please reflow for readability/consistency.

Suggested change
// unless configured otherwise)
// instead
// of forcing a blocking shard refresh after each updateByQuery. Lineage
// cleanup does not require immediate read-after-write consistency.
// unless configured otherwise) instead of forcing a blocking shard refresh
// after each updateByQuery, since lineage cleanup does not require immediate
// read-after-write consistency.

Copilot uses AI. Check for mistakes.
Comment on lines +889 to +892
// after
// each
// updateByQuery. Lineage cleanup does not require immediate read-after-write
// consistency.
Copy link

Copilot AI Mar 30, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The inline comment above .refresh(Refresh.False) is broken into multiple single-word lines (e.g., // after, // each, // updateByQuery), which makes it hard to read and doesn’t match typical formatting in this file. Please reflow it into normal wrapped lines.

Suggested change
// after
// each
// updateByQuery. Lineage cleanup does not require immediate read-after-write
// consistency.
// after each updateByQuery. Lineage cleanup does not require immediate
// read-after-write consistency.

Copilot uses AI. Check for mistakes.
Comment on lines +948 to +952
.refresh(Refresh.False));
// refresh=false: rely on the index's default refresh interval (default 1s unless configured
// otherwise) instead
// of forcing a blocking shard refresh after each updateByQuery. Lineage
// cleanup does not require immediate read-after-write consistency.
Copy link

Copilot AI Mar 30, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The refresh=false rationale comment is placed after the updateByQuery(...).refresh(Refresh.False)); statement and is awkwardly line-wrapped (splits phrases like "otherwise) instead" / "Lineage"). Consider moving the comment immediately above the .refresh(...) call and reflowing it for readability.

Suggested change
.refresh(Refresh.False));
// refresh=false: rely on the index's default refresh interval (default 1s unless configured
// otherwise) instead
// of forcing a blocking shard refresh after each updateByQuery. Lineage
// cleanup does not require immediate read-after-write consistency.
// refresh=false: rely on the index's default refresh interval (default 1s
// unless configured otherwise) instead of forcing a blocking shard refresh
// after each updateByQuery. Lineage cleanup does not require immediate
// read-after-write consistency.
.refresh(Refresh.False));

Copilot uses AI. Check for mistakes.
Comment on lines +819 to +822
// unless configured otherwise)
// instead
// of forcing a blocking shard refresh after each updateByQuery. Lineage
// cleanup does not require immediate read-after-write consistency.
Copy link

Copilot AI Mar 30, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The refresh=false rationale comment is oddly split across lines (standalone // instead) which hurts readability. Please reflow it into normally wrapped lines to match the surrounding style.

Suggested change
// unless configured otherwise)
// instead
// of forcing a blocking shard refresh after each updateByQuery. Lineage
// cleanup does not require immediate read-after-write consistency.
// unless configured otherwise) instead of forcing a blocking shard refresh
// after each updateByQuery. Lineage cleanup does not require immediate
// read-after-write consistency.

Copilot uses AI. Check for mistakes.
@harshach harshach added the safe to test Add this label to run secure Github workflows on PRs label Apr 8, 2026
@gitar-bot
Copy link
Copy Markdown

gitar-bot bot commented Apr 8, 2026

Code Review ✅ Approved 5 resolved / 5 findings

Improves PATCH table API performance by deduplicating lineage operations and optimizing column matching, resolving five issues including blocking refresh calls, stale entry accumulation, and duplicate column key handling. No issues remain.

✅ 5 resolved
Performance: updateColumnsInUpstreamLineage still uses blocking refresh(true)

📄 openmetadata-service/src/main/java/org/openmetadata/service/search/elasticsearch/ElasticSearchEntityManager.java:818 📄 openmetadata-service/src/main/java/org/openmetadata/service/search/opensearch/OpenSearchEntityManager.java:887
The PR description states that refresh=true was changed to refresh=false to avoid blocking shard refreshes, but this was only done for deleteColumnsInUpstreamLineage. The updateColumnsInUpstreamLineage method still uses refresh(true) in both ElasticSearchEntityManager (line 818) and OpenSearchEntityManager (line 887). The same rationale applies: column rename lineage cleanup doesn't need immediate read-after-write consistency, and the blocking refresh on 13k+ documents causes the same ~90s stall described in the PR for the rename path.

Bug: pendingDeletedColumnFqns accumulates stale entries across consolidation passes

📄 openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TableRepository.java:2455-2456
During consolidation, updateInternal() runs multiple times with different original states. The rename map correctly uses clear() + putAll() (line 2459) so only the final pass's renames survive. However, pendingDeletedColumnFqns uses addAll() (line 2456), which accumulates entries across passes.

If Pass 1 detects column X as deleted (because original differs from the final consolidated state), but Pass 2/3 does not (because the consolidated comparison shows X still exists), the stale FQN from Pass 1 remains in pendingDeletedColumnFqns. The flush would then issue a deleteColumnsInUpstreamLineage for a column that wasn't actually deleted in the final state, incorrectly removing lineage references from the search index.

The fix is to mirror the rename pattern: clear the set before adding the current pass's deletes.

Performance: Reverts GLOBAL_SEARCH_ALIAS→TABLE_SEARCH_INDEX optimization

📄 openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TableRepository.java:2472 📄 openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TableRepository.java:2477
This commit reverts TABLE_SEARCH_INDEX back to GLOBAL_SEARCH_ALIAS for both updateColumnsInUpstreamLineage and deleteColumnsInUpstreamLineage. The PR description explicitly identifies this as root cause #3:

updateColumnsInUpstreamLineage and deleteColumnsInUpstreamLineage were using GLOBAL_SEARCH_ALIAS ("all") — an alias that spans every index in the cluster. Column lineage data lives exclusively in table_search_index, so running updateByQuery against all indices was scanning irrelevant shards, wasting I/O and cluster resources.

Yet this latest commit undoes that fix, meaning updateByQuery will again run against every index in the cluster instead of just table_search_index. If there was a reason the scoped index didn't work (e.g., lineage data exists in other indices, or the alias is required for cross-cluster setups), the PR description should be updated to reflect that, and ideally a comment should explain why GLOBAL_SEARCH_ALIAS is necessary here despite the performance cost.

Bug: OpenSearch deleteColumnsInUpstreamLineage still uses Refresh.True

📄 openmetadata-service/src/main/java/org/openmetadata/service/search/opensearch/OpenSearchEntityManager.java:948-952
The comment at line 949-952 says refresh=false but the actual code on line 948 still has .refresh(Refresh.True). The updateColumnsInUpstreamLineage method was correctly changed to Refresh.False (line 893), but deleteColumnsInUpstreamLineage was missed. This means the delete-column lineage path still blocks on a shard refresh, defeating half of the performance optimization described in the PR.

The comment also has a typo: "otherwisedefault 1s unless configured otherwise" is duplicated.

Edge Case: Duplicate ColumnKey when origColumns has case-variant names

📄 openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java:7939-7942
In EntityRepository.java, the origColumnByKey HashMap is built by iterating over origColumns and inserting each column keyed by columnLookupKey(col). If two original columns have names that differ only by case (e.g., "ID" and "id" with the same dataType/arrayDataType), the second put silently overwrites the first, losing a column from the lookup. The old stream().filter().findAny() approach had the same limitation (it would return an arbitrary match), so this is not a regression, but worth noting since the HashMap makes the data loss deterministic rather than arbitrary.

Options

Display: compact → Showing less information.

Comment with these commands to change:

Compact
gitar display:verbose         

Was this helpful? React with 👍 / 👎 | Gitar

@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud bot commented Apr 9, 2026

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 9, 2026

🔴 Playwright Results — 2 failure(s), 20 flaky

✅ 2957 passed · ❌ 2 failed · 🟡 20 flaky · ⏭️ 174 skipped

Shard Passed Failed Flaky Skipped
🟡 Shard 1 453 0 4 2
🔴 Shard 2 638 2 2 32
🟡 Shard 3 645 0 6 26
🟡 Shard 4 616 0 6 47
🟡 Shard 5 605 0 2 67

Genuine Failures (failed on all attempts)

Features/Glossary/GlossaryMutualExclusivity.spec.ts › ME-R01: Children of ME parent should render checkboxes (shard 2)
Error: �[2mexpect(�[22m�[31mlocator�[39m�[2m).�[22mtoBeVisible�[2m(�[22m�[2m)�[22m failed

Locator: getByTestId('tag-"PW%\'d608b04e.Bright2674bd24"."PW.ed07563e%Rabbitfc3be6b8"')
Expected: visible
Timeout: 15000ms
Error: element(s) not found

Call log:
�[2m  - Expect "toBeVisible" with timeout 15000ms�[22m
�[2m  - waiting for getByTestId('tag-"PW%\'d608b04e.Bright2674bd24"."PW.ed07563e%Rabbitfc3be6b8"')�[22m

Features/Glossary/GlossaryMutualExclusivity.spec.ts › ME-S01: Selecting ME child should auto-deselect siblings (shard 2)
Error: �[2mexpect(�[22m�[31mlocator�[39m�[2m).�[22mtoBeVisible�[2m(�[22m�[2m)�[22m failed

Locator: getByTestId('tag-"PW%\'e73a67b2.Brightacb83757"."PW.c17bef03%Zebraf4a12c56"')
Expected: visible
Timeout: 15000ms
Error: element(s) not found

Call log:
�[2m  - Expect "toBeVisible" with timeout 15000ms�[22m
�[2m  - waiting for getByTestId('tag-"PW%\'e73a67b2.Brightacb83757"."PW.c17bef03%Zebraf4a12c56"')�[22m

🟡 20 flaky test(s) (passed on retry)
  • Features/DataAssetRulesDisabled.spec.ts › Verify the Pipeline Service entity item action after rules disabled (shard 1, 1 retry)
  • Features/DataAssetRulesDisabled.spec.ts › Verify the Storage Service entity item action after rules disabled (shard 1, 1 retry)
  • Features/CustomizeDetailPage.spec.ts › Dashboard - customization should work (shard 1, 1 retry)
  • Pages/UserCreationWithPersona.spec.ts › Create user with persona and verify on profile (shard 1, 1 retry)
  • Features/BulkEditEntity.spec.ts › Glossary (shard 2, 1 retry)
  • Features/Glossary/GlossaryMutualExclusivity.spec.ts › ME-S02: Can select multiple children under non-ME parent (shard 2, 2 retries)
  • Features/Permissions/GlossaryPermissions.spec.ts › Team-based permissions work correctly (shard 3, 1 retry)
  • Flow/ExploreDiscovery.spec.ts › Should display deleted assets when showDeleted is checked and deleted is not present in queryFilter (shard 3, 1 retry)
  • Flow/ObservabilityAlerts.spec.ts › Test Suite alert (shard 3, 1 retry)
  • Flow/PersonaDeletionUserProfile.spec.ts › User profile loads correctly before and after persona deletion (shard 3, 1 retry)
  • Flow/PersonaFlow.spec.ts › Persona creation should work properly with breadcrumb navigation (shard 3, 1 retry)
  • Flow/PersonaFlow.spec.ts › Set default persona for team should work properly (shard 3, 1 retry)
  • Pages/Customproperties-part2.spec.ts › entityReferenceList shows item count, scrollable list, no expand toggle (shard 4, 1 retry)
  • Pages/DataContracts.spec.ts › Create Data Contract and validate for Table (shard 4, 1 retry)
  • Pages/Domains.spec.ts › Rename domain with assets (tables, topics, dashboards) preserves associations (shard 4, 1 retry)
  • Pages/Domains.spec.ts › Multiple consecutive domain renames preserve all associations (shard 4, 1 retry)
  • Pages/Entity.spec.ts › Set & Update table-cp, hyperlink-cp, string, integer, markdown, number, duration, email, enum, sqlQuery, timestamp, entityReference, entityReferenceList, timeInterval, time-cp, date-cp, dateTime-cp Custom Property (shard 4, 1 retry)
  • Pages/Entity.spec.ts › Update displayName (shard 4, 1 retry)
  • Pages/ExploreTree.spec.ts › Verify Database and Database Schema available in explore tree (shard 5, 1 retry)
  • Pages/Glossary.spec.ts › Add and Remove Assets (shard 5, 2 retries)

📦 Download artifacts

How to debug locally
# Download playwright-test-results-<shard> artifact and unzip
npx playwright show-trace path/to/trace.zip    # view trace

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

safe to test Add this label to run secure Github workflows on PRs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG][Performance Issue] PATCH /api/v1/tables/{id} extremely slow (49–99s) during Database Service ingestion workflow

3 participants