Skip to content

fix(search): set dynamic:false on all index mappings to stop uncontrolled dynamic mapping#28711

Open
mohityadav766 wants to merge 2 commits into
mainfrom
fix/stop-dynamic-mapping
Open

fix(search): set dynamic:false on all index mappings to stop uncontrolled dynamic mapping#28711
mohityadav766 wants to merge 2 commits into
mainfrom
fix/stop-dynamic-mapping

Conversation

@mohityadav766
Copy link
Copy Markdown
Member

Problem

Production reindex failure (SPG-DEV and others):

failed to parse field [pipelineStatuses.config.appConfig.actions.customProperties]
of type [text] in document ... Preview of field's value: '{columndatepivot=jointure}'

pipelineStatuses (and other arbitrary config sub-trees like config/appConfig) had no dynamic setting, so ES/OS dynamically mapped unexpected fields. A string value auto-typed customProperties as text; a later object value ({columndatepivot=jointure}) then failed to parse → mapper_parsing_exception. Uncontrolled dynamic mapping is also the root cause of field-count explosion.

This is the "stop dynamic mapping completely" hardening discussed for indexing safety.

Fix

Add "dynamic": false at the mappings root of every index mapping (all locales, 241 files). Unexpected fields are stored in _source but never auto-typed or indexed, so:

  • no type conflicts (string-then-object),
  • no field-count explosion from arbitrary keys.

All searchable/aggregatable fields stay explicitly mapped. Report-data/analytics indices map their data fields explicitly (verified), so nothing relied on dynamic indexing.

dynamic:false (not strict) is used deliberately — strict would reject documents carrying config; false is non-destructive (stores, doesn't reject).

Validation

Reproduced and verified against a real OpenSearch node:

  • DynamicMappingTypeConflictTest — reproduces the exact text vs object parse failure on a dynamic mapping, and proves dynamic:false (and the real ingestion_pipeline mapping) accept both string and object config values.
  • IndexMappingNestedFieldConsistencyTest.allIndexMappingsMustDisableDynamic — guards that every mapping keeps dynamic:false.

Existing mapping/search tests pass: IndexMappingVersionTrackerTest, SearchIndexReindexFieldsParityTest, SearchSourceBuilderFactoryTest, IndexMappingNestedFieldConsistencyTest.

Notes

🤖 Generated with Claude Code

…lled dynamic mapping

Reproduces and fixes the production reindex failure:

  failed to parse field [pipelineStatuses.config.appConfig.actions.customProperties]
  of type [text] ... value: '{columndatepivot=jointure}'

pipelineStatuses (and other arbitrary config sub-trees) had no dynamic setting, so
OpenSearch/Elasticsearch dynamically mapped unexpected fields. A string value
auto-typed customProperties as text; a later object value then failed to parse.
Uncontrolled dynamic mapping also causes field-count explosion.

Adds "dynamic": false at the mappings root of every index mapping (all locales).
Unexpected fields are stored in _source but never auto-typed or indexed, so type
conflicts and field explosion cannot happen. All searchable/aggregatable fields
remain explicitly mapped; report-data indices map their data fields explicitly, so
nothing relied on dynamic indexing.

- DynamicMappingTypeConflictTest: standalone OpenSearch testcontainer; reproduces
  the type conflict on a dynamic mapping and proves dynamic:false (and the real
  ingestion_pipeline mapping) accept both string and object config values.
- IndexMappingNestedFieldConsistencyTest.allIndexMappingsMustDisableDynamic:
  guards that every mapping keeps "dynamic": false.

Note: changing mappings triggers a reindex on deploy (mapping version changes).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings June 4, 2026 15:58
@github-actions github-actions Bot added backend safe to test Add this label to run secure Github workflows on PRs labels Jun 4, 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 hardens OpenMetadata’s Elasticsearch/OpenSearch index mappings by disabling uncontrolled dynamic mapping ("dynamic": false) across all index mapping JSON files to prevent type-conflict reindex failures and field-count explosions from arbitrary config keys.

Changes:

  • Set "mappings": { "dynamic": false, ... } in all shipped index mapping JSONs (all locales + report/analytics indices).
  • Add a regression test to enforce that all loaded mappings keep dynamic:false.
  • Add a Testcontainers-backed repro test that demonstrates the dynamic-mapping type conflict and validates the fix against a real OpenSearch node.

Reviewed changes

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

Show a summary per file
File Description
openmetadata-spec/src/main/resources/elasticsearch/zh/worksheet_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/user_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/topic_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/test_suite_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/test_case_result_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/test_case_resolution_status_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/test_case_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/team_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/tag_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/table_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/stored_procedure_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/storage_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/spreadsheet_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/security_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/search_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/search_entity_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/query_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/query_cost_record_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/prompt_template_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/pipeline_status_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/pipeline_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/pipeline_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/mlmodel_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/mlmodel_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/metric_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/metadata_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/messaging_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/mcp_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/mcp_server_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/mcp_execution_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/llm_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/llm_model_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/knowledge_page_search_index.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/ingestion_pipeline_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/glossary_term_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/glossary_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/folder_search_index.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/file_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/drive_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/domain_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/directory_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/database_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/database_schema_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/database_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/data_products_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/dashboard_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/dashboard_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/dashboard_data_model_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/context_memory_search_index.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/context_file_search_index.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/container_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/column_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/classification_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/chart_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/api_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/api_endpoint_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/api_collection_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/ai_governance_policy_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/zh/ai_agent_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/web_analytic_user_activity_report_data_index.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/web_analytic_entity_view_report_data_index.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/raw_cost_analysis_report_data_index.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/entity_report_data_index.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/aggregated_cost_analysis_report_data_index.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/worksheet_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/user_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/topic_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/test_suite_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/test_case_result_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/test_case_resolution_status_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/test_case_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/team_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/tag_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/table_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/stored_procedure_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/storage_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/spreadsheet_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/security_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/search_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/search_entity_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/query_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/query_cost_record_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/prompt_template_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/pipeline_status_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/pipeline_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/pipeline_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/mlmodel_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/mlmodel_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/metric_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/metadata_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/messaging_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/mcp_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/mcp_server_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/mcp_execution_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/llm_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/llm_model_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/knowledge_page_search_index.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/ingestion_pipeline_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/glossary_term_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/glossary_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/folder_search_index.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/file_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/drive_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/domain_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/directory_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/database_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/database_schema_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/database_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/data_products_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/dashboard_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/dashboard_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/dashboard_data_model_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/context_memory_search_index.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/context_file_search_index.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/container_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/column_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/classification_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/chart_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/api_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/api_endpoint_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/api_collection_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/ai_governance_policy_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/ru/ai_agent_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/worksheet_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/user_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/topic_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/test_suite_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/test_case_result_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/test_case_resolution_status_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/test_case_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/team_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/tag_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/table_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/stored_procedure_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/storage_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/spreadsheet_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/security_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/search_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/search_entity_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/query_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/query_cost_record_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/prompt_template_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/pipeline_status_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/pipeline_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/pipeline_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/mlmodel_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/mlmodel_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/metric_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/metadata_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/messaging_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/mcp_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/mcp_server_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/mcp_execution_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/llm_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/llm_model_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/knowledge_page_search_index.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/ingestion_pipeline_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/glossary_term_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/glossary_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/folder_search_index.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/file_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/drive_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/domain_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/directory_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/database_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/database_schema_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/database_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/data_products_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/dashboard_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/dashboard_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/dashboard_data_model_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/context_memory_search_index.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/context_file_search_index.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/container_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/column_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/classification_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/chart_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/api_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/api_endpoint_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/api_collection_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/ai_governance_policy_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/jp/ai_agent_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/worksheet_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/user_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/topic_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/test_suite_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/test_case_result_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/test_case_resolution_status_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/test_case_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/team_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/tag_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/table_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/stored_procedure_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/storage_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/spreadsheet_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/security_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/search_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/search_entity_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/query_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/query_cost_record_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/prompt_template_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/pipeline_status_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/pipeline_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/pipeline_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/mlmodel_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/mlmodel_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/metric_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/metadata_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/messaging_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/mcp_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/mcp_server_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/mcp_execution_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/llm_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/llm_model_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/knowledge_page_search_index.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/ingestion_pipeline_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/glossary_term_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/glossary_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/folder_search_index.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/file_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/drive_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/domain_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/directory_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/database_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/database_schema_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/database_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/data_products_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/dashboard_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/dashboard_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/dashboard_data_model_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/context_memory_search_index.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/context_file_search_index.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/container_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/column_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/classification_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/chart_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/api_service_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/api_endpoint_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/api_collection_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/ai_governance_policy_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-spec/src/main/resources/elasticsearch/en/ai_agent_index_mapping.json Disable dynamic mapping at mappings root
openmetadata-service/src/test/java/org/openmetadata/service/search/IndexMappingNestedFieldConsistencyTest.java Add enforcement test for mappings.dynamic=false
openmetadata-service/src/test/java/org/openmetadata/service/search/DynamicMappingTypeConflictTest.java Add real-OpenSearch repro test for dynamic-mapping type conflicts

Comment on lines +128 to +133
for (Map.Entry<String, JsonNode> entry : allMappings.entrySet()) {
JsonNode dynamic = entry.getValue().path("mappings").path("dynamic");
if (dynamic.isMissingNode() || dynamic.asBoolean(true)) {
violations.add(
entry.getKey() + " (dynamic=" + (dynamic.isMissingNode() ? "missing" : dynamic) + ")");
}
Comment on lines +62 to +67
opensearch =
new GenericContainer<>(DockerImageName.parse("opensearchproject/opensearch:2.13.0"))
.withEnv("discovery.type", "single-node")
.withEnv("DISABLE_SECURITY_PLUGIN", "true")
.withEnv("DISABLE_INSTALL_DEMO_CONFIG", "true")
.withEnv("OPENSEARCH_JAVA_OPTS", "-Xms1g -Xmx1g")
Comment on lines +116 to +121
try (InputStream is =
getClass()
.getClassLoader()
.getResourceAsStream("elasticsearch/en/ingestion_pipeline_index_mapping.json")) {
mapping = new String(is.readAllBytes(), StandardCharsets.UTF_8);
}
Comment on lines +132 to +136
HttpRequest request =
HttpRequest.newBuilder(URI.create(baseUrl + path))
.header("Content-Type", "application/json")
.PUT(HttpRequest.BodyPublishers.ofString(body))
.build();
mohityadav766 added a commit that referenced this pull request Jun 4, 2026
…e conflicts

Targeted stopgap for the production reindex failure:

  failed to parse field [pipelineStatuses.config.appConfig.actions.customProperties]
  of type [text] ... value: '{columndatepivot=jointure}'

pipelineStatuses allowed dynamic mapping of its arbitrary config sub-tree, so a
string value auto-typed customProperties as text and a later object value failed
to parse. Adds "dynamic": false to pipelineStatuses (all locales) so the config
sub-tree is stored in _source but never auto-typed. The comprehensive index-wide
dynamic:false is handled separately (#28711); this gives immediate relief here.

Validated on a real OpenSearch node: the real ingestion_pipeline mapping now
accepts both string and object config values.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 2026

🔴 Playwright Results — 38 failure(s), 15 flaky

✅ 4226 passed · ❌ 38 failed · 🟡 15 flaky · ⏭️ 89 skipped

Shard Passed Failed Flaky Skipped
🟡 Shard 1 300 0 1 4
🔴 Shard 2 794 6 4 9
🔴 Shard 3 796 3 5 9
🔴 Shard 4 838 15 2 12
🟡 Shard 5 720 0 1 47
🔴 Shard 6 778 14 2 8

Genuine Failures (failed on all attempts)

Features/DataQuality/BundleSuiteBulkOperations.spec.ts › Add test case to existing Bundle Suite (shard 2)
Error: �[2mexpect(�[22m�[31mlocator�[39m�[2m).�[22mtoBeVisible�[2m(�[22m�[2m)�[22m failed

Locator: locator('.ant-select-dropdown:visible').locator('.ant-select-item-option').filter({ hasText: 'pw-bundle-suite-064b0125' })
Expected: visible
Timeout: 15000ms
Error: element(s) not found

Call log:
�[2m  - Expect "toBeVisible" with timeout 15000ms�[22m
�[2m  - waiting for locator('.ant-select-dropdown:visible').locator('.ant-select-item-option').filter({ hasText: 'pw-bundle-suite-064b0125' })�[22m

Features/DataQuality/DataQualityDashboard.spec.ts › DataQualityDashboardTab (shard 2)
Error: �[2mexpect(�[22m�[31mlocator�[39m�[2m).�[22mtoHaveText�[2m(�[22m�[32mexpected�[39m�[2m)�[22m failed

Locator:  locator('[data-testid="entity-health-pie-chart-widget"]').getByTestId('legend-count-healthy')
Expected: �[32m"1"�[39m
Received: �[31m"3"�[39m
Timeout:  15000ms

Call log:
�[2m  - Expect "toHaveText" with timeout 15000ms�[22m
�[2m  - waiting for locator('[data-testid="entity-health-pie-chart-widget"]').getByTestId('legend-count-healthy')�[22m
�[2m    19 × locator resolved to <span data-testid="legend-count-healthy" class="ant-typography text-grey-muted">…</span>�[22m
�[2m       - unexpected value "3"�[22m

Features/DataQuality/DataQualityDashboard.spec.ts › Entity Health pie chart segment click redirects to Test Cases with correct status (shard 2)
Error: �[2mexpect(�[22m�[31mlocator�[39m�[2m).�[22mtoBeVisible�[2m(�[22m�[2m)�[22m failed

Locator: locator('#healthy-data-assets-pie-chart').locator('.custom-pie-chart-clickable path').nth(1)
Expected: visible
Timeout: 15000ms
Error: element(s) not found

Call log:
�[2m  - Expect "toBeVisible" with timeout 15000ms�[22m
�[2m  - waiting for locator('#healthy-data-assets-pie-chart').locator('.custom-pie-chart-clickable path').nth(1)�[22m

Features/DataQuality/TestSuiteListAfterReindex.spec.ts › Basic test suite stays listed on the table-suites page after a full reindex (shard 2)
Error: pre-reindex: basic suite with a test case must appear in the table-suites list

�[2mexpect(�[22m�[31mreceived�[39m�[2m).�[22mtoBe�[2m(�[22m�[32mexpected�[39m�[2m) // Object.is equality�[22m

Expected: �[32mtrue�[39m
Received: �[31mfalse�[39m

Call Log:
- Timeout 30000ms exceeded while waiting on the predicate
Features/DomainFilterQueryFilter.spec.ts › 3-level domain hierarchy: SubSubDomain assets visible when SubDomain selected (shard 2)
�[31mTest timeout of 180000ms exceeded.�[39m
Features/DomainFilterQueryFilter.spec.ts › Multi-nested domain hierarchy: filters should scope correctly at every level (shard 2)
�[31mTest timeout of 180000ms exceeded.�[39m
Features/LineagePipelineAnnotator.spec.ts › service lineage has pipeline service connected to both services (shard 3)
Error: �[2mexpect(�[22m�[31mreceived�[39m�[2m).�[22mtoBe�[2m(�[22m�[32mexpected�[39m�[2m) // Object.is equality�[22m

Expected: �[32mtrue�[39m
Received: �[31mfalse�[39m
Features/SearchExport.spec.ts › Search mode visible export downloads CSV with tab-specific row count (shard 3)
�[31mTest timeout of 180000ms exceeded.�[39m
Features/SearchExport.spec.ts › Filtered search visible export downloads CSV with the filtered record count (shard 3)
�[31mTest timeout of 180000ms exceeded.�[39m
Pages/DataContracts.spec.ts › Create Data Contract and validate for Table (shard 4)
Error: �[2mexpect(�[22m�[31mlocator�[39m�[2m).�[22mtoBeVisible�[2m(�[22m�[2m)�[22m failed

Locator: getByTestId('test-suite-table').locator('[role="gridcell"]').filter({ hasText: 'Data Contract - data_contract_2be12d9f' })
Expected: visible
Timeout: 15000ms
Error: element(s) not found

Call log:
�[2m  - Expect "toBeVisible" with timeout 15000ms�[22m
�[2m  - waiting for getByTestId('test-suite-table').locator('[role="gridcell"]').filter({ hasText: 'Data Contract - data_contract_2be12d9f' })�[22m

Pages/DataProductAndSubdomains.spec.ts › Create multiple sibling subdomains under a domain (shard 4)
Error: �[2mexpect(�[22m�[31mlocator�[39m�[2m).�[22mtoBeVisible�[2m(�[22m�[2m)�[22m failed

Locator: getByTestId('PW%Subdomain.7ce7669e')
Expected: visible
Timeout: 15000ms
Error: element(s) not found

Call log:
�[2m  - Expect "toBeVisible" with timeout 15000ms�[22m
�[2m  - waiting for getByTestId('PW%Subdomain.7ce7669e')�[22m

Pages/DataProductAndSubdomains.spec.ts › Create nested subdomain (subdomain of subdomain) (shard 4)
Error: �[2mexpect(�[22m�[31mlocator�[39m�[2m).�[22mtoBeVisible�[2m(�[22m�[2m)�[22m failed

Locator: getByTestId('PW%Subdomain.5c2080f9')
Expected: visible
Timeout: 15000ms
Error: element(s) not found

Call log:
�[2m  - Expect "toBeVisible" with timeout 15000ms�[22m
�[2m  - waiting for getByTestId('PW%Subdomain.5c2080f9')�[22m

Pages/DataProductAndSubdomains.spec.ts › Navigate between sibling subdomains (shard 4)
�[31mTest timeout of 180000ms exceeded.�[39m
Pages/DomainAdvanced.spec.ts › User with domain access can view subdomains (shard 4)
Error: �[2mexpect(�[22m�[31mlocator�[39m�[2m).�[22mtoBeVisible�[2m(�[22m�[2m)�[22m failed

Locator: getByTestId('PW%Subdomain.5b669309')
Expected: visible
Timeout: 15000ms
Error: element(s) not found

Call log:
�[2m  - Expect "toBeVisible" with timeout 15000ms�[22m
�[2m  - waiting for getByTestId('PW%Subdomain.5b669309')�[22m

Pages/Domains.spec.ts › Follow/unfollow subdomain and create nested sub domain (shard 4)
Error: �[2mexpect(�[22m�[31mlocator�[39m�[2m).�[22mtoBeVisible�[2m(�[22m�[2m)�[22m failed

Locator: getByTestId('PW%Subdomain.f92b0e15')
Expected: visible
Timeout: 15000ms
Error: element(s) not found

Call log:
�[2m  - Expect "toBeVisible" with timeout 15000ms�[22m
�[2m  - waiting for getByTestId('PW%Subdomain.f92b0e15')�[22m

Pages/Domains.spec.ts › Verify domain and subdomain asset count accuracy (shard 4)
Error: �[2mexpect(�[22m�[31mlocator�[39m�[2m).�[22mtoBeVisible�[2m(�[22m�[2m)�[22m failed

Locator: getByTestId('PW%Subdomain.e2fa4798')
Expected: visible
Timeout: 15000ms
Error: element(s) not found

Call log:
�[2m  - Expect "toBeVisible" with timeout 15000ms�[22m
�[2m  - waiting for getByTestId('PW%Subdomain.e2fa4798')�[22m

Pages/Domains.spec.ts › Verify domain data products count includes subdomain data products (shard 4)
Error: �[2mexpect(�[22m�[31mlocator�[39m�[2m).�[22mtoBeVisible�[2m(�[22m�[2m)�[22m failed

Locator: getByTestId('PW%Subdomain.52452a23')
Expected: visible
Timeout: 15000ms
Error: element(s) not found

Call log:
�[2m  - Expect "toBeVisible" with timeout 15000ms�[22m
�[2m  - waiting for getByTestId('PW%Subdomain.52452a23')�[22m

Pages/Domains.spec.ts › Create subdomain with tags using TagSuggestion (shard 4)
�[31mTest timeout of 180000ms exceeded.�[39m
Pages/Domains.spec.ts › Rename domain with subdomains attached verifies subdomain accessibility (shard 4)
Error: �[2mexpect(�[22m�[31mlocator�[39m�[2m).�[22mtoBeVisible�[2m(�[22m�[2m)�[22m failed

Locator: getByTestId('PW%Subdomain.9a662e7f')
Expected: visible
Timeout: 15000ms
Error: element(s) not found

Call log:
�[2m  - Expect "toBeVisible" with timeout 15000ms�[22m
�[2m  - waiting for getByTestId('PW%Subdomain.9a662e7f')�[22m

Pages/Domains.spec.ts › Rename domain with deeply nested subdomains (3+ levels) verifies FQN propagation (shard 4)
Error: �[2mexpect(�[22m�[31mlocator�[39m�[2m).�[22mtoBeVisible�[2m(�[22m�[2m)�[22m failed

Locator: getByTestId('PW%Subdomain.cfcc9c4c')
Expected: visible
Timeout: 15000ms
Error: element(s) not found

Call log:
�[2m  - Expect "toBeVisible" with timeout 15000ms�[22m
�[2m  - waiting for getByTestId('PW%Subdomain.cfcc9c4c')�[22m

Pages/Domains.spec.ts › Subdomain rename does not affect parent domain and updates nested children (shard 4)
Error: �[2mexpect(�[22m�[31mlocator�[39m�[2m).�[22mtoBeVisible�[2m(�[22m�[2m)�[22m failed

Locator: getByTestId('PW%Subdomain.4e2b613d')
Expected: visible
Timeout: 15000ms
Error: element(s) not found

Call log:
�[2m  - Expect "toBeVisible" with timeout 15000ms�[22m
�[2m  - waiting for getByTestId('PW%Subdomain.4e2b613d')�[22m

Pages/Domains.spec.ts › Comprehensive domain rename with ALL relationships preserved (shard 4)
Error: �[2mexpect(�[22m�[31mlocator�[39m�[2m).�[22mtoContainText�[2m(�[22m�[32mexpected�[39m�[2m)�[22m failed

Locator: getByTestId('subdomains').getByTestId('count')
Expected substring: �[32m"1"�[39m
Received string:    �[31m"0"�[39m
Timeout: 15000ms

Call log:
�[2m  - Expect "toContainText" with timeout 15000ms�[22m
�[2m  - waiting for getByTestId('subdomains').getByTestId('count')�[22m
�[2m    19 × locator resolved to <span data-testid="count">…</span>�[22m
�[2m       - unexpected value "0"�[22m

Pages/Domains.spec.ts › Multiple consecutive domain renames preserve all associations (shard 4)
Error: �[2mexpect(�[22m�[31mlocator�[39m�[2m).�[22mtoBeVisible�[2m(�[22m�[2m)�[22m failed

Locator: getByTestId('PW%Subdomain.bd514e10')
Expected: visible
Timeout: 15000ms
Error: element(s) not found

Call log:
�[2m  - Expect "toBeVisible" with timeout 15000ms�[22m
�[2m  - waiting for getByTestId('PW%Subdomain.bd514e10')�[22m

Pages/Domains.spec.ts › should render the domain tree view with correct details (shard 4)
Error: �[2mexpect(�[22m�[31mlocator�[39m�[2m).�[22mtoBeVisible�[2m(�[22m�[2m)�[22m failed

Locator: getByRole('treeitem', { name: 'PW Sub Domain 3e876ed2' }).locator('div').nth(2)
Expected: visible
Timeout: 15000ms
Error: element(s) not found

Call log:
�[2m  - Expect "toBeVisible" with timeout 15000ms�[22m
�[2m  - waiting for getByRole('treeitem', { name: 'PW Sub Domain 3e876ed2' }).locator('div').nth(2)�[22m

Pages/Lineage/LineageRightPanel.spec.ts › Verify custom properties tab IS visible for supported type: chart (shard 6)
�[31mTest timeout of 60000ms exceeded.�[39m
Pages/Lineage/LineageRightPanel.spec.ts › Verify custom properties tab is NOT visible for databaseService in platform lineage (shard 6)
Error: �[2mexpect(�[22m�[31mreceived�[39m�[2m).�[22mtoBe�[2m(�[22m�[32mexpected�[39m�[2m) // Object.is equality�[22m

Expected: �[32m200�[39m
Received: �[31m500�[39m
Pages/Lineage/LineageRightPanel.spec.ts › Verify custom properties tab is NOT visible for messagingService in platform lineage (shard 6)
Error: �[2mexpect(�[22m�[31mreceived�[39m�[2m).�[22mtoBe�[2m(�[22m�[32mexpected�[39m�[2m) // Object.is equality�[22m

Expected: �[32m200�[39m
Received: �[31m500�[39m
Pages/Lineage/LineageRightPanel.spec.ts › Verify custom properties tab is NOT visible for dashboardService in platform lineage (shard 6)
Error: �[2mexpect(�[22m�[31mreceived�[39m�[2m).�[22mtoBe�[2m(�[22m�[32mexpected�[39m�[2m) // Object.is equality�[22m

Expected: �[32m200�[39m
Received: �[31m500�[39m
Pages/Lineage/LineageRightPanel.spec.ts › Verify custom properties tab is NOT visible for pipelineService in platform lineage (shard 6)
Error: �[2mexpect(�[22m�[31mreceived�[39m�[2m).�[22mtoBe�[2m(�[22m�[32mexpected�[39m�[2m) // Object.is equality�[22m

Expected: �[32m200�[39m
Received: �[31m500�[39m
Pages/Lineage/LineageRightPanel.spec.ts › Verify custom properties tab is NOT visible for mlmodelService in platform lineage (shard 6)
Error: �[2mexpect(�[22m�[31mreceived�[39m�[2m).�[22mtoBe�[2m(�[22m�[32mexpected�[39m�[2m) // Object.is equality�[22m

Expected: �[32m200�[39m
Received: �[31m500�[39m

... and 8 more failures

🟡 15 flaky test(s) (passed on retry)
  • Flow/CustomizeLandingPage.spec.ts › Add, Remove and Reset widget should work properly (shard 1, 1 retry)
  • Features/ExploreQuickFilters.spec.ts › should persist quick filter on global search (shard 2, 1 retry)
  • Features/ExploreQuickFilters.spec.ts › explore tree sidebar selection is not cleared when a top dropdown filter is applied (shard 2, 1 retry)
  • Features/Glossary/GlossaryWorkflow.spec.ts › should display correct status badge color and icon (shard 2, 1 retry)
  • Features/Glossary/GlossaryWorkflow.spec.ts › should start term as Draft when glossary has reviewers (shard 2, 1 retry)
  • Features/KnowledgeCenterList.spec.ts › Knowledge Center List - Test upvote and downvote buttons (shard 3, 1 retry)
  • Features/RTL.spec.ts › Verify Following widget functionality (shard 3, 1 retry)
  • Features/Tasks/TaskNavigation.spec.ts › navigating to /table/TASK-XXXXX should show 404 (invalid URL pattern) (shard 3, 1 retry)
  • Features/UserProfileOnlineStatus.spec.ts › Should show online status badge on user profile for active users (shard 3, 1 retry)
  • Flow/ExploreAggregationCountsMatching.spec.ts › should verify left panel counts and tab search results for normal search (shard 3, 1 retry)
  • Pages/DomainUIInteractions.spec.ts › Add owner to domain via UI (shard 4, 1 retry)
  • Pages/DomainUIInteractions.spec.ts › Delete data product via UI (shard 4, 1 retry)
  • Pages/ExplorePageRightPanel_KnowledgeCenter.spec.ts › Should remove user owner for knowledgeCenter (shard 5, 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)

📦 Download artifacts

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

@harshach
Copy link
Copy Markdown
Collaborator

harshach commented Jun 4, 2026

@mohityadav766 lets file a github issue that can be reproducible. We are not going to merge this. Without clear evidence and testing we are going to add more baggage

- IndexMappingNestedFieldConsistencyTest: require the boolean false at the
  mappings root (not asBoolean(true), which let "strict"/non-boolean values
  pass) and recursively forbid nested "dynamic": true overrides
- test_case_resolution_status (en/jp/ru/zh): flip the nested
  testCaseResolutionStatusDetails "dynamic": true -> false so the root
  hardening is not re-opened for that subtree (only assignee.name is queried
  and it stays explicitly mapped, so no search regression)
- DynamicMappingTypeConflictTest: pin OpenSearch to 3.4.0 to match the rest
  of the test/dev infra with a lighter 512m heap, null-check the mapping
  resource stream, and add per-request + connect HTTP timeouts

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@gitar-bot
Copy link
Copy Markdown

gitar-bot Bot commented Jun 5, 2026

Code Review ✅ Approved 2 resolved / 2 findings

Hardens index mappings by setting dynamic:false globally to prevent field-count explosions and parsing conflicts. Resolved nested override issues and improved the validation coverage for mapping consistency.

✅ 2 resolved
Bug: Nested dynamic:true override defeats hardening in test_case_resolution_status

📄 openmetadata-spec/src/main/resources/elasticsearch/en/test_case_resolution_status_index_mapping.json:74 📄 openmetadata-spec/src/main/resources/elasticsearch/en/test_case_resolution_status_index_mapping.json:117 📄 openmetadata-spec/src/main/resources/elasticsearch/jp/test_case_resolution_status_index_mapping.json 📄 openmetadata-spec/src/main/resources/elasticsearch/ru/test_case_resolution_status_index_mapping.json 📄 openmetadata-spec/src/main/resources/elasticsearch/zh/test_case_resolution_status_index_mapping.json
The PR's stated goal is to "stop dynamic mapping completely" by setting "dynamic": false at the mappings root of every index. However, test_case_resolution_status_index_mapping.json (all locales: en/jp/ru/zh) still contains an explicit "dynamic": true on the nested testCaseResolutionStatusDetails object (en line 117).

In Elasticsearch/OpenSearch the dynamic setting is inherited by child objects but a child can override its parent. Because testCaseResolutionStatusDetails explicitly re-enables "dynamic": true, the root "dynamic": false does NOT apply to that subtree. Arbitrary fields placed under testCaseResolutionStatusDetails will still be auto-typed and indexed — exactly the uncontrolled-dynamic-mapping condition that causes the string-then-object mapper_parsing_exception and field-count explosion this PR sets out to eliminate. So for this index the fix is incomplete: the type-conflict failure mode remains reachable.

This nested dynamic:true line is pre-existing, but the PR introduces it as a residual gap in the otherwise blanket hardening. Consider flipping it to false (or removing it so it inherits the root false) unless there is a documented reason the resolution-status details subtree must remain dynamically mapped — in which case the PR description's "every index"/"completely" claim should be qualified.

Quality: Guard test only checks root dynamic, misses nested dynamic:true overrides

📄 openmetadata-service/src/test/java/org/openmetadata/service/search/IndexMappingNestedFieldConsistencyTest.java:126-140
The new guard test allIndexMappingsMustDisableDynamic only inspects the top-level mappings.dynamic node (entry.getValue().path("mappings").path("dynamic"), line 129). It does not recurse into nested object properties, so an explicit "dynamic": true on a nested object — such as the one on testCaseResolutionStatusDetails in test_case_resolution_status_index_mapping.json — passes the test even though that subtree still allows uncontrolled dynamic mapping.

This gives false confidence that dynamic mapping is fully disabled. Strengthen the test to walk the properties tree and assert that no nested object sets "dynamic": true (i.e., any nested dynamic must be false/strict), so future regressions and the existing residual override are caught.

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 Jun 5, 2026

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.

3 participants