Skip to content

Commit 6ea2b74

Browse files
Merge branch 'main' into meetup-connector
2 parents 3e19db8 + 54ae549 commit 6ea2b74

284 files changed

Lines changed: 13787 additions & 2017 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/pull_request_template.md

Lines changed: 84 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,21 @@ Unless your change is trivial, please create an issue to discuss the change befo
55

66
### Describe your changes:
77

8-
Fixes <issue-number>
8+
Fixes #<issue-number>
9+
<!--
10+
Linking an issue is REQUIRED. Replace <issue-number> with the GitHub issue number this PR addresses
11+
(e.g., `Fixes #12345`). GitHub will auto-link it. If no issue exists, please open one first so the
12+
problem and design can be discussed before review.
13+
-->
914

1015
<!--
1116
Short blurb explaining:
1217
- What changes did you make?
1318
- Why did you make them?
14-
- How did you test your changes?
1519
-->
1620

1721
I worked on ... because ...
1822

19-
<!-- For frontend related change, please add screenshots and/or videos of your changes preview! -->
20-
2123
#
2224
### Type of change:
2325
<!-- You should choose 1 option and delete options that aren't relevant -->
@@ -27,13 +29,90 @@ I worked on ... because ...
2729
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
2830
- [ ] Documentation
2931

32+
#
33+
### High-level design:
34+
<!--
35+
REQUIRED for large PRs (new features, refactors, breaking changes, or anything touching >5 files).
36+
Skip for small bug fixes and trivial changes.
37+
38+
Cover:
39+
- Architecture / approach you took and why
40+
- Key components or files added/changed and how they interact
41+
- Alternatives considered and why you rejected them
42+
- Any migration, backward-compatibility, or rollout concerns
43+
- Diagrams or links to design docs / RFCs if available
44+
-->
45+
46+
N/A — small change. <!-- Or fill in the design above -->
47+
48+
#
49+
### Tests:
50+
51+
#### Use cases covered
52+
<!--
53+
List the user-visible scenarios this PR exercises. Example:
54+
- User with Admin role can create a Glossary Term with a parent term
55+
- Ingestion run for Snowflake correctly extracts row counts for partitioned tables
56+
-->
57+
58+
#### Unit tests
59+
<!--
60+
- [ ] I added unit tests for the new/changed logic.
61+
- Files added/updated:
62+
- Coverage on changed classes (run `mvn jacoco:report` for backend, `yarn test:coverage` for UI,
63+
`make unit_ingestion` for ingestion). Target is 90% line coverage on changed classes.
64+
- Coverage %: <e.g., 92% on EntityRepository.java>
65+
-->
66+
67+
#### Backend integration tests
68+
<!--
69+
- [ ] I added integration tests in `openmetadata-integration-tests/` for new/changed API endpoints.
70+
- [ ] Not applicable (no backend API changes).
71+
- Files added/updated:
72+
-->
73+
74+
#### Ingestion integration tests
75+
<!--
76+
- [ ] I added/updated ingestion integration tests for connector changes.
77+
- [ ] Not applicable (no ingestion changes).
78+
- Files added/updated:
79+
-->
80+
81+
#### Playwright (UI) tests
82+
<!--
83+
- [ ] I added Playwright E2E tests under `openmetadata-ui/.../ui/playwright/` for UI changes.
84+
- [ ] Not applicable (no UI changes).
85+
- Files added/updated:
86+
-->
87+
88+
#### Manual testing performed
89+
<!--
90+
List the manual test steps you performed before requesting review. Example:
91+
1. Started local stack via `./docker/run_local_docker.sh -m ui -d mysql`
92+
2. Logged in as admin, created entity X, verified Y appears in the UI
93+
3. Triggered ingestion for Snowflake source, confirmed lineage edges in the explore page
94+
-->
95+
96+
#
97+
### UI screen recording / screenshots:
98+
<!--
99+
REQUIRED for any PR that changes the UI. Drag-and-drop a short screen recording (.mov / .mp4 / .gif)
100+
demonstrating the change end-to-end, plus before/after screenshots where relevant.
101+
Mark "Not applicable" if there are no UI changes.
102+
-->
103+
104+
Not applicable. <!-- Or attach recording/screenshots above -->
105+
30106
#
31107
### Checklist:
32108
<!-- add an x in [] if done, don't mark items that you didn't do !-->
33109
- [x] I have read the [**CONTRIBUTING**](https://docs.open-metadata.org/developers/contribute) document.
34110
- [ ] My PR title is `Fixes <issue-number>: <short explanation>`
35-
- [ ] I have commented on my code, particularly in hard-to-understand areas.
111+
- [ ] My PR is linked to a GitHub issue via `Fixes #<issue-number>` above.
112+
- [ ] I have commented on my code, particularly in hard-to-understand areas.
36113
- [ ] For JSON Schema changes: I updated the migration scripts or explained why it is not needed.
114+
- [ ] For UI changes: I attached a screen recording and/or screenshots above.
115+
- [ ] I have added tests (unit / integration / Playwright as applicable) and listed them above.
37116

38117
<!-- Based on the type(s) of your change, uncomment the required checklist 👇 -->
39118

.github/workflows/py-cli-e2e-tests.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ on:
1818
e2e-tests:
1919
description: "E2E Tests to run"
2020
required: True
21-
default: '["bigquery", "dbt_redshift", "metabase", "mssql", "mysql", "redash", "snowflake", "tableau", "python-unittests", "python-integration", "redshift", "quicksight", "datalake_s3", "postgres", "oracle", "athena", "bigquery_multiple_project"]'
21+
default: '["bigquery", "dbt_redshift", "metabase", "mssql", "mysql", "redash", "snowflake", "tableau", "python-unittests", "python-integration", "redshift", "quicksight", "datalake_s3", "postgres", "oracle", "athena", "bigquery_multiple_project", "exasol"]'
2222
debug:
2323
description: "If Debugging the Pipeline, Slack and Sonar events won't be triggered [default, true or false]. Default will trigger only on main branch."
2424
required: False
@@ -45,7 +45,7 @@ jobs:
4545
strategy:
4646
fail-fast: false
4747
matrix:
48-
e2e-test: ${{ fromJSON(inputs.e2e-tests || '["bigquery", "dbt_redshift", "metabase", "mssql", "mysql", "redash", "snowflake", "tableau", "python-unittests", "python-integration", "redshift", "quicksight", "datalake_s3", "postgres", "oracle", "athena", "bigquery_multiple_project"]') }}
48+
e2e-test: ${{ fromJSON(inputs.e2e-tests || '["bigquery", "dbt_redshift", "metabase", "mssql", "mysql", "redash", "snowflake", "tableau", "python-unittests", "python-integration", "redshift", "quicksight", "datalake_s3", "postgres", "oracle", "athena", "bigquery_multiple_project", "exasol"]') }}
4949
environment: test
5050

5151
steps:
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
-- Placeholder for 1.12.7 MySQL post-data migration script
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
-- Placeholder for 1.12.7 MySQL schema changes
2+
-- The Postgres-side fix for #27158 has no MySQL counterpart: MySQL's
3+
-- 1.11.0 indexes were already non-partial (no partial-index syntax in
4+
-- MySQL), so the regression that hit Postgres did not affect MySQL.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
-- Placeholder for 1.12.7 PostgreSQL post-data migration script
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
-- Issue #27158: tag_usage seq-scan on Postgres. #24063 dropped the
2+
-- `state = 1` predicate that 1.11.0's partial indexes required.
3+
-- Fix: add single-col indexes on the `_lower` columns, and drop the
4+
-- `WHERE state = 1` filter from the partials so changes can't invalidate them.
5+
6+
DROP INDEX CONCURRENTLY IF EXISTS idx_tag_usage_targetfqnhash_lower_pattern;
7+
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_tag_usage_targetfqnhash_lower_pattern
8+
ON tag_usage (targetfqnhash_lower text_pattern_ops);
9+
10+
DROP INDEX CONCURRENTLY IF EXISTS idx_tag_usage_tagfqn_lower_pattern;
11+
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_tag_usage_tagfqn_lower_pattern
12+
ON tag_usage (tagfqn_lower text_pattern_ops);
13+
14+
DROP INDEX CONCURRENTLY IF EXISTS idx_tag_usage_target_prefix_covering;
15+
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_tag_usage_target_prefix_covering
16+
ON tag_usage (source, targetfqnhash_lower text_pattern_ops)
17+
INCLUDE (tagFQN, labelType, state);
18+
19+
DROP INDEX CONCURRENTLY IF EXISTS idx_tag_usage_tagfqn_prefix_covering;
20+
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_tag_usage_tagfqn_prefix_covering
21+
ON tag_usage (source, tagfqn_lower text_pattern_ops)
22+
INCLUDE (targetFQNHash, labelType, state);
23+
24+
DROP INDEX CONCURRENTLY IF EXISTS idx_tag_usage_join_source;
25+
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_tag_usage_join_source
26+
ON tag_usage (tagFQNHash, source)
27+
INCLUDE (targetFQNHash, tagFQN, labelType, state);
28+
29+
CREATE EXTENSION IF NOT EXISTS pg_trgm;
30+
DROP INDEX CONCURRENTLY IF EXISTS gin_tag_usage_targetfqn_trgm;
31+
CREATE INDEX CONCURRENTLY IF NOT EXISTS gin_tag_usage_targetfqn_trgm
32+
ON tag_usage USING GIN (targetFQNHash gin_trgm_ops);

bootstrap/sql/migrations/native/1.13.0/mysql/schemaChanges.sql

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,3 +321,9 @@ ALTER TABLE search_index_server_stats
321321
-- already declared `CHARACTER SET ascii COLLATE ascii_bin`, a binary
322322
-- collation that lets the existing unique B-tree on `fqnHash` answer LIKE
323323
-- prefix predicates directly. No change required on the MySQL side.
324+
325+
-- MCP OAuth: state parameter is opaque per RFC 6749 §4.1.1 and some clients (notably the
326+
-- Databricks MCP Proxy) send tokens longer than 255 characters. Widen mcp_state to TEXT to
327+
-- avoid INSERT failures on /mcp/authorize redirects.
328+
ALTER TABLE mcp_pending_auth_requests
329+
MODIFY COLUMN mcp_state TEXT;

bootstrap/sql/migrations/native/1.13.0/postgres/schemaChanges.sql

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,3 +474,9 @@ CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_spreadsheet_entity_fqnhash_pattern
474474
DROP INDEX CONCURRENTLY IF EXISTS idx_worksheet_entity_fqnhash_pattern;
475475
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_worksheet_entity_fqnhash_pattern
476476
ON worksheet_entity (fqnHash text_pattern_ops);
477+
478+
-- MCP OAuth: state parameter is opaque per RFC 6749 §4.1.1 and some clients (notably the
479+
-- Databricks MCP Proxy) send tokens longer than 255 characters. Widen mcp_state to TEXT to
480+
-- avoid INSERT failures on /mcp/authorize redirects.
481+
ALTER TABLE mcp_pending_auth_requests
482+
ALTER COLUMN mcp_state TYPE TEXT;

ingestion/setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@
282282
"opensearch": {VERSIONS["opensearch"]},
283283
"exasol": {
284284
"sqlalchemy_exasol>=6,<7",
285-
"exasol-integration-test-docker-environment>=3.1.0,<4",
285+
"exasol-integration-test-docker-environment>=6.0.0,<7",
286286
},
287287
"glue": {VERSIONS["boto3"]},
288288
"great-expectations": {VERSIONS["great-expectations"]},

ingestion/src/metadata/data_quality/validations/table/base/tableColumnCountToBeBetween.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,11 @@ def _run_validation(self) -> TestCaseResult:
5757
min_bound = self.get_min_bound("minColValue")
5858
max_bound = self.get_max_bound("maxColValue")
5959

60+
column_word = "column" if count == 1 else "columns"
6061
return self.get_test_case_result_object(
6162
self.execution_date,
62-
self.get_test_case_status(min_bound <= count <= max_bound),
63-
f"Found columnCount={count} column vs. the expected min={min_bound} and max={max_bound}].",
63+
self.get_test_case_status(min_bound <= count <= max_bound), # type: ignore
64+
f"Found columnCount={count} {column_word} vs. the expected min={min_bound} and max={max_bound}",
6465
[TestResultValue(name=COLUMN_COUNT, value=str(count))],
6566
)
6667

0 commit comments

Comments
 (0)