Skip to content

Set Indexing related executor threads priority to LOW #27153

Open
mohityadav766 wants to merge 7 commits intomainfrom
lower-prio
Open

Set Indexing related executor threads priority to LOW #27153
mohityadav766 wants to merge 7 commits intomainfrom
lower-prio

Conversation

@mohityadav766
Copy link
Copy Markdown
Member

@mohityadav766 mohityadav766 commented Apr 8, 2026

Describe your changes:

Fixes

I worked on ... because ...

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.

Summary by Gitar

  • Memory optimization:
    • Added caches in ReindexingMetrics for stage and promotion counters to avoid creating duplicate metric instances
    • Added contextDataCache in SearchIndexExecutor to reuse context data across entity types
    • Refactored JSON data creation in ElasticSearchBulkSink and OpenSearchBulkSink to prevent redundant conversions
  • Thread priority:
    • Set Thread.MIN_PRIORITY for job, consumer, and producer executor threads in reindex process
    • Set Thread.MIN_PRIORITY for bulk flush scheduler threads in both Elasticsearch and OpenSearch sinks
  • Bug fixes:
    • Fixed failed reindex jobs not being reflected in UI by syncing app_extension_time_series in JobRecoveryManager
    • Added markRunningEntriesFailedByName() method to CollectionDAO for updating job status
  • Utilities:
    • Added toJsonData(Object pojo) overload methods in EsUtils and OsUtils for flexible JSON conversion
    • Added gc-reindex-report.sh script for monitoring GC pause statistics during reindex runs

This will update automatically on new commits.

@mohityadav766 mohityadav766 self-assigned this Apr 8, 2026
Copilot AI review requested due to automatic review settings April 8, 2026 04:27
@github-actions github-actions bot added backend safe to test Add this label to run secure Github workflows on PRs labels Apr 8, 2026
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

This PR aims to reduce memory/CPU overhead during search reindexing by avoiding repeated JSON parsing/metric registration and by lowering thread priority for reindex-related executors, plus adds a script to help quantify GC impact during reindex runs.

Changes:

  • Added toJsonData(Object) helpers for ES/OS clients and updated bulk sinks to build JsonData from POJOs instead of parsing JSON strings.
  • Lowered thread priorities for reindex job/producer/consumer pools and bulk flush schedulers; introduced small in-memory caches for context data and Micrometer counters.
  • Added gc-reindex-report.sh to collect/compare GC and health-probe behavior during a reindex.

Reviewed changes

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

Show a summary per file
File Description
openmetadata-service/src/main/java/org/openmetadata/service/search/opensearch/OsUtils.java Adds toJsonData(Object) helper for OpenSearch JSONP serialization.
openmetadata-service/src/main/java/org/openmetadata/service/search/elasticsearch/EsUtils.java Adds toJsonData(Object) helper for Elasticsearch JSONP serialization.
openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/searchIndex/SearchIndexExecutor.java Caches per-entityType context maps and lowers executor thread priority.
openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/searchIndex/ReindexingMetrics.java Caches dynamically-tagged counters to avoid repeated meter registration.
openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/searchIndex/OpenSearchBulkSink.java Switches bulk document creation to POJO-backed JsonData, tweaks size estimation, and lowers flush scheduler priority.
openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/searchIndex/ElasticSearchBulkSink.java Switches bulk document creation to POJO-backed JsonData, tweaks size estimation, and lowers flush scheduler priority.
bin/distributed-test/scripts/gc-reindex-report.sh New script to run reindex and report GC pause / probe behavior vs a baseline.

Comment on lines +356 to +360
String docId = entity.getId().toString();
long estimatedSize =
(long) finalJson.getBytes(StandardCharsets.UTF_8).length
+ BULK_OPERATION_METADATA_OVERHEAD;
long estimatedSize = (long) finalJson.length() + BULK_OPERATION_METADATA_OVERHEAD;

org.opensearch.client.json.JsonData jsonData =
embeddingsEnabled ? OsUtils.toJsonData(finalJson) : OsUtils.toJsonData(searchIndexDoc);
Copy link

Copilot AI Apr 8, 2026

Choose a reason for hiding this comment

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

estimatedSize is compared against maxPayloadSizeBytes (bytes), but finalJson.length() counts UTF-16 code units, not UTF-8 bytes. This can significantly under-estimate payload size for non-ASCII content and delay flushing past the configured byte limit, increasing memory usage / risk of oversized bulk requests. Consider estimating UTF-8 byte length without allocating a byte[] (or leave estimatedSizeBytes as -1 to fall back to estimateOperationSize(operation)).

Copilot uses AI. Check for mistakes.
Comment on lines 428 to 432
org.opensearch.client.json.JsonData jsonData = OsUtils.toJsonData(searchIndexDoc);
String docId = entity.getId().toString();
long estimatedSize =
(long) json.getBytes(StandardCharsets.UTF_8).length + BULK_OPERATION_METADATA_OVERHEAD;
(long) JsonUtils.pojoToJson(searchIndexDoc).length() + BULK_OPERATION_METADATA_OVERHEAD;

Copy link

Copilot AI Apr 8, 2026

Choose a reason for hiding this comment

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

estimatedSize is intended to be bytes (used vs maxPayloadSizeBytes), but JsonUtils.pojoToJson(searchIndexDoc).length() returns character count. For entities with non-ASCII text this will undercount, potentially causing the buffer to exceed the byte limit before flushing.

Copilot uses AI. Check for mistakes.
Comment on lines 524 to 528
.docAsUpsert(true)));
}
long estimatedSize =
(long) json.getBytes(StandardCharsets.UTF_8).length + BULK_OPERATION_METADATA_OVERHEAD;
(long) JsonUtils.pojoToJson(searchIndexDoc).length() + BULK_OPERATION_METADATA_OVERHEAD;
columnBulkProcessor.add(operation, docId, Entity.TABLE_COLUMN, null, estimatedSize);
Copy link

Copilot AI Apr 8, 2026

Choose a reason for hiding this comment

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

Same sizing issue here: JsonUtils.pojoToJson(searchIndexDoc).length() is not a byte count, but it is used as estimatedSizeBytes against maxPayloadSizeBytes. This can under-estimate payload size and reduce the effectiveness of the bulk payload limiter.

Copilot uses AI. Check for mistakes.
Comment on lines 303 to 308
Object searchIndexDoc = Entity.buildSearchIndex(entityType, entity).buildSearchIndexDoc();
String json = JsonUtils.pojoToJson(searchIndexDoc);
es.co.elastic.clients.json.JsonData jsonData = EsUtils.toJsonData(searchIndexDoc);
String docId = entity.getId().toString();
long estimatedSize =
(long) json.getBytes(StandardCharsets.UTF_8).length + BULK_OPERATION_METADATA_OVERHEAD;
(long) JsonUtils.pojoToJson(searchIndexDoc).length() + BULK_OPERATION_METADATA_OVERHEAD;

Copy link

Copilot AI Apr 8, 2026

Choose a reason for hiding this comment

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

estimatedSize is treated as bytes (compared against maxPayloadSizeBytes), but JsonUtils.pojoToJson(searchIndexDoc).length() returns character count. This can undercount for non-ASCII content and let the buffer exceed the configured byte limit before flushing.

Copilot uses AI. Check for mistakes.
String docId = entity.getId().toString();
long estimatedSize =
(long) json.getBytes(StandardCharsets.UTF_8).length + BULK_OPERATION_METADATA_OVERHEAD;
(long) JsonUtils.pojoToJson(searchIndexDoc).length() + BULK_OPERATION_METADATA_OVERHEAD;
Copy link

Copilot AI Apr 8, 2026

Choose a reason for hiding this comment

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

Same byte-vs-char sizing issue: JsonUtils.pojoToJson(searchIndexDoc).length() is a character count but is passed as estimatedSizeBytes and compared against maxPayloadSizeBytes.

Suggested change
(long) JsonUtils.pojoToJson(searchIndexDoc).length() + BULK_OPERATION_METADATA_OVERHEAD;
(long)
JsonUtils.pojoToJson(searchIndexDoc).getBytes(StandardCharsets.UTF_8).length
+ BULK_OPERATION_METADATA_OVERHEAD;

Copilot uses AI. Check for mistakes.
Comment on lines 472 to 476
.action(a -> a.doc(jsonData).docAsUpsert(true))));
}
long estimatedSize =
(long) json.getBytes(StandardCharsets.UTF_8).length + BULK_OPERATION_METADATA_OVERHEAD;
(long) JsonUtils.pojoToJson(searchIndexDoc).length() + BULK_OPERATION_METADATA_OVERHEAD;
columnBulkProcessor.add(operation, docId, Entity.TABLE_COLUMN, null, estimatedSize);
Copy link

Copilot AI Apr 8, 2026

Choose a reason for hiding this comment

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

Same sizing issue for column indexing: JsonUtils.pojoToJson(searchIndexDoc).length() returns chars, not UTF-8 bytes, but is used as estimatedSizeBytes for bulk payload limiting.

Copilot uses AI. Check for mistakes.
mohityadav766 added a commit that referenced this pull request Apr 8, 2026
Reverted : Cherry Pick : Fix: Resolve text fields to .keyword for ES/OS sorting and aggregation  (#27103)
Copilot AI review requested due to automatic review settings April 8, 2026 11:42
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 8 out of 9 changed files in this pull request and generated 3 comments.

(long) finalJson.getBytes(StandardCharsets.UTF_8).length
+ BULK_OPERATION_METADATA_OVERHEAD;

org.opensearch.client.json.JsonData jsonData = OsUtils.toJsonData(finalJson);
Copy link

Copilot AI Apr 8, 2026

Choose a reason for hiding this comment

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

The variable is declared as org.opensearch.client.json.JsonData, but OsUtils.toJsonData(...) returns the relocated OpenSearch client type (os.org.opensearch.client.json.JsonData). This mismatch will not compile and should use the same os.org.opensearch.client.json.JsonData type as the rest of the OpenSearch client usage in this file.

Suggested change
org.opensearch.client.json.JsonData jsonData = OsUtils.toJsonData(finalJson);
os.org.opensearch.client.json.JsonData jsonData = OsUtils.toJsonData(finalJson);

Copilot uses AI. Check for mistakes.
ColumnSearchIndex columnIndex = new ColumnSearchIndex(column, table);
Map<String, Object> searchIndexDoc = columnIndex.buildSearchIndexDoc();
String json = JsonUtils.pojoToJson(searchIndexDoc);
org.opensearch.client.json.JsonData jsonData = OsUtils.toJsonData(json);
Copy link

Copilot AI Apr 8, 2026

Choose a reason for hiding this comment

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

Same JsonData type mismatch as above: org.opensearch.client.json.JsonData is inconsistent with the relocated OpenSearch client (os.org.opensearch.client.*) used elsewhere in this class and returned by OsUtils.toJsonData(...). This should be the relocated JsonData type to compile.

Suggested change
org.opensearch.client.json.JsonData jsonData = OsUtils.toJsonData(json);
os.org.opensearch.client.json.JsonData jsonData = OsUtils.toJsonData(json);

Copilot uses AI. Check for mistakes.
Comment on lines +428 to +437
// Sync app_extension_time_series so the UI reflects FAILED instead of RUNNING.
// OmAppJobListener.jobWasExecuted() is bypassed during recovery (no Quartz context),
// so we update the time-series record here directly.
try {
collectionDAO
.appExtensionTimeSeriesDao()
.markRunningEntriesFailedByName(SEARCH_INDEX_APP_NAME);
} catch (Exception e) {
LOG.warn("Failed to update app_extension_time_series for failed job {}", job.getId(), e);
}
Copy link

Copilot AI Apr 8, 2026

Choose a reason for hiding this comment

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

The comment/log refer to app_extension_time_series, but the actual table/DAO is apps_extension_time_series (plural). Please align the wording to the real table name to avoid confusion when debugging.

Copilot uses AI. Check for mistakes.
Copilot AI review requested due to automatic review settings April 9, 2026 09:33
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 8 out of 9 changed files in this pull request and generated 3 comments.

}
}

public static JsonData toJsonData(Object pojo) {
Copy link

Copilot AI Apr 9, 2026

Choose a reason for hiding this comment

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

The new toJsonData(Object pojo) overload can accidentally serialize a JSON string as a JSON string literal (e.g., when the value is typed as Object but contains a String), instead of parsing it like toJsonData(String) does. Consider guarding instanceof String and delegating to the String overload, or renaming the POJO method to avoid ambiguous overload resolution.

Suggested change
public static JsonData toJsonData(Object pojo) {
public static JsonData toJsonData(Object pojo) {
if (pojo instanceof String) {
return toJsonData((String) pojo);
}

Copilot uses AI. Check for mistakes.
}
}

public static JsonData toJsonData(Object pojo) {
Copy link

Copilot AI Apr 9, 2026

Choose a reason for hiding this comment

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

The new toJsonData(Object pojo) overload is easy to misuse when callers have an Object that happens to hold a JSON String: it will serialize the string as a JSON scalar rather than parsing it (unlike toJsonData(String)). To avoid subtle indexing bugs, consider delegating to the String overload when pojo instanceof String, or rename the POJO conversion method to something non-overloaded.

Suggested change
public static JsonData toJsonData(Object pojo) {
public static JsonData toJsonData(Object pojo) {
if (pojo instanceof String) {
return toJsonData((String) pojo);
}

Copilot uses AI. Check for mistakes.
Comment on lines +7890 to +7893
@ConnectionAwareSqlUpdate(
value =
"UPDATE apps_extension_time_series SET json = jsonb_set(json, '{status}', '\"failed\"') WHERE appName = :appName AND json->>'status' = 'running' AND extension = 'status'",
connectionType = POSTGRES)
Copy link

Copilot AI Apr 9, 2026

Choose a reason for hiding this comment

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

This introduces another jsonb_set(..., '\"failed\"') literal for Postgres status updates. That style is fairly hard to reason about and easy to break when editing (double-escaping across Java+SQL), so it would be safer/clearer to use an explicit jsonb value in the SQL (e.g., casting a JSON string to jsonb or using to_jsonb) instead of relying on embedded quote/backslash escaping.

Copilot uses AI. Check for mistakes.
sonika-shah added a commit that referenced this pull request Apr 9, 2026
… case search indexing

Commit 2839bc2 cherry-picked PR #27153 ("Improve memory usage for
reindex") to 1.12.5, bundled with the revert of PR #27103. PR #27153
is still open/unmerged on main and introduced 6 extra file changes
that were never meant for 1.12.5.

The bulk sink change from `toJsonData(json_string)` to
`toJsonData(map_object)` bypassed Jackson's WRITE_DATES_AS_TIMESTAMPS=false
setting. During reindex, java.util.Date fields (like tags.appliedAt)
were sent as raw epoch Longs instead of ISO strings. OpenSearch
dynamically mapped tags.appliedAt as "long". Later, real-time indexing
(test case creation via API) sent appliedAt as ISO string — OpenSearch
rejected it with mapper_parsing_exception. Test cases with tags were
created in DB but silently never indexed in search.

This restores all 6 files to their pre-2839bc259f state, matching main.

Files restored:
- ElasticSearchBulkSink.java — back to pojoToJson → string → toJsonData(string)
- OpenSearchBulkSink.java — same
- EsUtils.java — removed toJsonData(Object) overload
- OsUtils.java — same
- SearchIndexExecutor.java — removed contextDataCache, Thread.MIN_PRIORITY
- ReindexingMetrics.java — removed counter caching

Requires reindex after deployment.
sonika-shah added a commit that referenced this pull request Apr 9, 2026
…e test case search indexing

Commit 2839bc2 cherry-picked PR #27153 ("Improve memory usage for
reindex") to 1.12.5, bundled with the revert of PR #27103. PR #27153
is still open/unmerged on main and introduced extra file changes
that were never meant for 1.12.5.

The bulk sink change from toJsonData(json_string) to
toJsonData(map_object) bypassed Jackson's WRITE_DATES_AS_TIMESTAMPS=false
setting. During reindex, java.util.Date fields (like tags.appliedAt)
were sent as raw epoch Longs instead of ISO strings. OpenSearch
dynamically mapped tags.appliedAt as "long". Later, real-time indexing
(test case creation via API) sent appliedAt as ISO string — OpenSearch
rejected it with mapper_parsing_exception. Test cases with tags were
created in DB but silently never indexed in search.

Changes:
- ElasticSearchBulkSink/OpenSearchBulkSink: reverted serialization
  back to pojoToJson → string → toJsonData(string), kept Thread.MIN_PRIORITY
- EsUtils/OsUtils: removed toJsonData(Object) overload
- SearchIndexExecutor: removed contextDataCache, kept Thread.MIN_PRIORITY
- ReindexingMetrics: removed counter caching

Requires reindex after deployment.
mohityadav766 pushed a commit that referenced this pull request Apr 9, 2026
…e test case search indexing (#27202)

Commit 2839bc2 cherry-picked PR #27153 ("Improve memory usage for
reindex") to 1.12.5, bundled with the revert of PR #27103. PR #27153
is still open/unmerged on main and introduced extra file changes
that were never meant for 1.12.5.

The bulk sink change from toJsonData(json_string) to
toJsonData(map_object) bypassed Jackson's WRITE_DATES_AS_TIMESTAMPS=false
setting. During reindex, java.util.Date fields (like tags.appliedAt)
were sent as raw epoch Longs instead of ISO strings. OpenSearch
dynamically mapped tags.appliedAt as "long". Later, real-time indexing
(test case creation via API) sent appliedAt as ISO string — OpenSearch
rejected it with mapper_parsing_exception. Test cases with tags were
created in DB but silently never indexed in search.

Changes:
- ElasticSearchBulkSink/OpenSearchBulkSink: reverted serialization
  back to pojoToJson → string → toJsonData(string), kept Thread.MIN_PRIORITY
- EsUtils/OsUtils: removed toJsonData(Object) overload
- SearchIndexExecutor: removed contextDataCache, kept Thread.MIN_PRIORITY
- ReindexingMetrics: removed counter caching

Requires reindex after deployment.
Copilot AI review requested due to automatic review settings April 13, 2026 12:26
@mohityadav766 mohityadav766 changed the title Improve memory usage for reindex process and lower priority Threads Set Indexing related executor threads priority to LOW Apr 13, 2026
@gitar-bot
Copy link
Copy Markdown

gitar-bot bot commented Apr 13, 2026

Code Review ✅ Approved 1 resolved / 1 findings

Improves memory usage for the reindex process by eliminating double serialization during size estimation and lowering thread priority. No issues found.

✅ 1 resolved
Performance: Double serialization negates memory optimization for size estimation

📄 openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/searchIndex/ElasticSearchBulkSink.java:306-307 📄 openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/searchIndex/ElasticSearchBulkSink.java:379-380 📄 openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/searchIndex/ElasticSearchBulkSink.java:474-475 📄 openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/searchIndex/OpenSearchBulkSink.java:430-431 📄 openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/searchIndex/OpenSearchBulkSink.java:526-527 📄 openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/searchIndex/OpenSearchBulkSink.java:357 📄 openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/searchIndex/ElasticSearchBulkSink.java:307 📄 openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/searchIndex/ElasticSearchBulkSink.java:380 📄 openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/searchIndex/ElasticSearchBulkSink.java:475 📄 openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/searchIndex/OpenSearchBulkSink.java:431 📄 openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/searchIndex/OpenSearchBulkSink.java:527
The PR's goal is to reduce memory usage by passing POJOs directly to toJsonData() instead of going through an intermediate JSON string. However, several call sites still call JsonUtils.pojoToJson(searchIndexDoc).length() solely to compute estimatedSize, creating a temporary JSON string that is immediately discarded. This means the object is effectively serialized twice — once into JsonData and once into a throwaway String — partially defeating the memory optimization.

Consider computing the estimated size from the JsonData object itself, or caching the JSON string length from a single serialization pass.

Options

Display: compact → Showing less information.

Comment with these commands to change:

Compact
gitar display:verbose         

Was this helpful? React with 👍 / 👎 | Gitar

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 4 out of 5 changed files in this pull request and generated 1 comment.

Comment on lines +428 to +437
// Sync app_extension_time_series so the UI reflects FAILED instead of RUNNING.
// OmAppJobListener.jobWasExecuted() is bypassed during recovery (no Quartz context),
// so we update the time-series record here directly.
try {
collectionDAO
.appExtensionTimeSeriesDao()
.markRunningEntriesFailedByName(SEARCH_INDEX_APP_NAME);
} catch (Exception e) {
LOG.warn("Failed to update app_extension_time_series for failed job {}", job.getId(), e);
}
Copy link

Copilot AI Apr 13, 2026

Choose a reason for hiding this comment

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

JobRecoveryManager now updates apps_extension_time_series via markRunningEntriesFailedByName() when failing an orphaned job, but the existing JobRecoveryManager tests don’t cover this new side-effect. Add/extend a unit test to verify the DAO method is invoked on failJob() and that exceptions from this update are swallowed as intended (since the call is wrapped in a try/catch).

Copilot generated this review using guidance from repository custom instructions.
@sonarqubecloud
Copy link
Copy Markdown

@github-actions
Copy link
Copy Markdown
Contributor

🔴 Playwright Results — 1 failure(s), 25 flaky

✅ 3598 passed · ❌ 1 failed · 🟡 25 flaky · ⏭️ 207 skipped

Shard Passed Failed Flaky Skipped
🟡 Shard 1 455 0 2 2
🟡 Shard 2 640 0 3 32
🔴 Shard 3 643 1 5 26
🟡 Shard 4 622 0 5 47
🟡 Shard 5 608 0 1 67
🟡 Shard 6 630 0 9 33

Genuine Failures (failed on all attempts)

Features/RestoreEntityInheritedFields.spec.ts › Validate restore with Inherited domain and data products assigned (shard 3)
Error: �[2mexpect(�[22m�[31mreceived�[39m�[2m).�[22mtoBe�[2m(�[22m�[32mexpected�[39m�[2m) // Object.is equality�[22m

Expected: �[32m200�[39m
Received: �[31m400�[39m
🟡 25 flaky test(s) (passed on retry)
  • Pages/AuditLogs.spec.ts › should apply both User and EntityType filters simultaneously (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/ChangeSummaryBadge.spec.ts › Automated badge should appear on entity description with Automated source (shard 2, 1 retry)
  • Features/Glossary/GlossaryP3Tests.spec.ts › should display vote count correctly (shard 2, 1 retry)
  • Features/Permissions/GlossaryPermissions.spec.ts › Team-based permissions work correctly (shard 3, 1 retry)
  • Features/RestoreEntityInheritedFields.spec.ts › Validate restore with Inherited domain and data products assigned (shard 3, 1 retry)
  • Features/RestoreEntityInheritedFields.spec.ts › Validate restore with Inherited domain and data products assigned (shard 3, 1 retry)
  • Features/RestoreEntityInheritedFields.spec.ts › Validate restore with Inherited domain and data products assigned (shard 3, 1 retry)
  • Features/RTL.spec.ts › Verify Following widget functionality (shard 3, 1 retry)
  • Pages/Customproperties-part2.spec.ts › entityReferenceList shows item count, scrollable list, no expand toggle (shard 4, 1 retry)
  • Pages/DomainAdvanced.spec.ts › Admin can edit data product description (shard 4, 1 retry)
  • Pages/Domains.spec.ts › Rename domain with data products attached at domain and subdomain levels (shard 4, 1 retry)
  • Pages/Domains.spec.ts › Rename domain with assets (tables, topics, dashboards) preserves associations (shard 4, 1 retry)
  • Pages/DomainUIInteractions.spec.ts › Select domain from global dropdown filters explore (shard 4, 1 retry)
  • Pages/Glossary.spec.ts › Add and Remove Assets (shard 5, 1 retry)
  • Pages/HyperlinkCustomProperty.spec.ts › should accept valid http and https URLs (shard 6, 1 retry)
  • Pages/Lineage/DataAssetLineage.spec.ts › Column lineage for topic -> searchIndex (shard 6, 1 retry)
  • Pages/Lineage/LineageFilters.spec.ts › Verify lineage schema filter selection (shard 6, 1 retry)
  • Pages/Lineage/LineageRightPanel.spec.ts › Verify custom properties tab IS visible for supported type: searchIndex (shard 6, 1 retry)
  • Pages/Lineage/PlatformLineage.spec.ts › Verify domain platform view (shard 6, 1 retry)
  • Pages/ODCSImportExport.spec.ts › Multi-object ODCS contract - object selector shows all schema objects (shard 6, 1 retry)
  • Pages/Users.spec.ts › Create and Delete user (shard 6, 1 retry)
  • Pages/Users.spec.ts › Permissions for table details page for Data Consumer (shard 6, 1 retry)
  • VersionPages/EntityVersionPages.spec.ts › Directory (shard 6, 1 retry)

📦 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

backend 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.

2 participants