Skip to content

feat (IOMETE): Add IOMETE database connector for ingestion#27157

Merged
harshach merged 15 commits intoopen-metadata:mainfrom
sahmadov:iomete
Apr 10, 2026
Merged

feat (IOMETE): Add IOMETE database connector for ingestion#27157
harshach merged 15 commits intoopen-metadata:mainfrom
sahmadov:iomete

Conversation

@sahmadov
Copy link
Copy Markdown
Contributor

@sahmadov sahmadov commented Apr 8, 2026

Describe your changes:

This PR adds a new IOMETE database connector to OpenMetadata, enabling metadata ingestion from IOMETE — a Sovereign Lakehouse platform built on Apache Spark and Arrow Flight SQL.

Why:
IOMETE is an enterprise Lakehouse platform not previously supported in OpenMetadata. Users running IOMETE need to be able to discover, profile, and track lineage of their Lakehouse tables through OpenMetadata.

How tested:

  • Unit tests run against a mocked engine (no live cluster required)
  • Manually validated connection URL construction, catalog switching, and schema definition fallback behavior
  • Test connection step validated against test_connection_db_schema_sources shared infrastructure

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.

oppr

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 8, 2026

Hi there 👋 Thanks for your contribution!

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

Let us know if you need any help!

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 8, 2026

Hi there 👋 Thanks for your contribution!

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

Let us know if you need any help!

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 8, 2026

Hi there 👋 Thanks for your contribution!

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

Let us know if you need any help!

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 8, 2026

Hi there 👋 Thanks for your contribution!

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

Let us know if you need any help!

@sahmadov sahmadov marked this pull request as ready for review April 8, 2026 08:39
@sahmadov sahmadov requested review from a team as code owners April 8, 2026 08:39
@harshach harshach added the safe to test Add this label to run secure Github workflows on PRs label Apr 8, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 8, 2026

⚠️ TypeScript Types Need Update

The generated TypeScript types are out of sync with the JSON schema changes.

Since this is a pull request from a forked repository, the types cannot be automatically committed.
Please generate and commit the types manually:

cd openmetadata-ui/src/main/resources/ui
./json2ts-generate-all.sh -l true
git add src/generated/
git commit -m "Update generated TypeScript types"
git push

After pushing the changes, this check will pass automatically.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 8, 2026

The Python checkstyle failed.

Please run make py_format and py_format_check in the root of your repository and commit the changes to this PR.
You can also use pre-commit to automate the Python code formatting.

You can install the pre-commit hooks with make install_test precommit_install.

@sahmadov sahmadov changed the title feat: (Add IOMETE database connector for ingestion) feat (IOMETE): Add IOMETE database connector for ingestion Apr 9, 2026
@sahmadov
Copy link
Copy Markdown
Contributor Author

sahmadov commented Apr 9, 2026

iomete+flightsql

this one is false alarm, dialect expects just "iomete" and it is tested in unit tests. "iomete+flightsql" was older version of dialect.

@gitar-bot
Copy link
Copy Markdown

gitar-bot Bot commented Apr 10, 2026

Code Review 🚫 Blocked 3 resolved / 4 findings

IOMETE database connector addition is blocked by a critical dialect drivername mismatch: the get_connection function passes "iomete" to URL construction but should use "iomete+flightsql". Three other issues were resolved: added error handling for non-numeric ports, fixed missing newlines, and implemented connectionOptions/Arguments support.

🚨 Bug: Dialect drivername mismatch: "iomete" vs "iomete+flightsql"

📄 ingestion/src/metadata/ingestion/source/database/iomete/connection.py:54-56 📄 ingestion/tests/unit/topology/database/test_iomete.py:72

The get_connection function passes "iomete" to URL.create(), but the test at line 72 asserts url.drivername == "iomete+flightsql". URL.create("iomete") produces a URL with drivername="iomete" — SQLAlchemy does not auto-append the driver suffix. This means either:

  1. The test will fail as written, or
  2. The wrong dialect is being loaded at runtime ("iomete" default driver instead of the explicit FlightSQL driver).

The docstring in connection.py explicitly states the intent to use iomete+flightsql. The drivername should be corrected to match.

Suggested fix
url = URL.create(
    "iomete+flightsql",
    username=connection.username,
    ...
✅ 3 resolved
Edge Case: No error handling for non-numeric port in hostPort parsing

📄 ingestion/src/metadata/ingestion/source/database/iomete/connection.py:41-46
int(port_str) at line 43 will raise an unhandled ValueError if a user provides a malformed hostPort value like "dev.iomete.cloud:abc". Other connectors (e.g., DB2) wrap this in a try-except with a user-friendly error message. Since hostPort comes from user input via the JSON schema, this should be handled gracefully.

Quality: Missing newline at end of multiple files

📄 openmetadata-service/src/main/resources/json/data/testConnections/database/iomete.json:32 📄 ingestion/src/metadata/ingestion/source/database/iomete/connection.py:79 📄 ingestion/tests/unit/topology/database/test_iomete.py:357
Several new files are missing a trailing newline: iomete.json, connection.py, test_iomete.py. While cosmetic, this triggers "No newline at end of file" warnings in diffs and can cause issues with some text processing tools. POSIX requires text files to end with a newline.

Bug: connectionOptions and connectionArguments are silently ignored

📄 ingestion/src/metadata/ingestion/source/database/iomete/connection.py:39-53 📄 openmetadata-spec/src/main/resources/json/schema/entity/services/connections/database/iometeConnection.json:59-66
The IometeConnection JSON schema defines connectionOptions and connectionArguments fields, but get_connection() never reads them. Users who configure these fields will have their settings silently dropped. Every other database connector in the codebase passes these through via create_generic_db_connection() / get_connection_args_common(), or manually appends them to the engine kwargs.

This means users cannot configure TLS settings, timeouts, or other driver-specific options through the standard OpenMetadata UI fields.

🤖 Prompt for agents
Code Review: IOMETE database connector addition is blocked by a critical dialect drivername mismatch: the `get_connection` function passes "iomete" to URL construction but should use "iomete+flightsql". Three other issues were resolved: added error handling for non-numeric ports, fixed missing newlines, and implemented connectionOptions/Arguments support.

1. 🚨 Bug: Dialect drivername mismatch: "iomete" vs "iomete+flightsql"
   Files: ingestion/src/metadata/ingestion/source/database/iomete/connection.py:54-56, ingestion/tests/unit/topology/database/test_iomete.py:72

   The `get_connection` function passes `"iomete"` to `URL.create()`, but the test at line 72 asserts `url.drivername == "iomete+flightsql"`. `URL.create("iomete")` produces a URL with `drivername="iomete"` — SQLAlchemy does not auto-append the driver suffix. This means either:
   
   1. The test will fail as written, or
   2. The wrong dialect is being loaded at runtime ("iomete" default driver instead of the explicit FlightSQL driver).
   
   The docstring in connection.py explicitly states the intent to use `iomete+flightsql`. The drivername should be corrected to match.

   Suggested fix:
   url = URL.create(
       "iomete+flightsql",
       username=connection.username,
       ...

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
Copy link
Copy Markdown

@harshach harshach merged commit a995a29 into open-metadata:main Apr 10, 2026
54 of 55 checks passed
SaaiAravindhRaja pushed a commit to SaaiAravindhRaja/OpenMetadata that referenced this pull request Apr 12, 2026
…data#27157)

* adding working basic version of iomete connector

* mark these release as beta version

* add final parts

* integrate latest version

* fixing tests

* add docs for fields

* Update generated TypeScript types

* fix more formating

---------

Co-authored-by: Sanan <sanan@iomete.com>
Co-authored-by: Sriharsha Chintalapani <harshach@users.noreply.github.com>
SaaiAravindhRaja pushed a commit to SaaiAravindhRaja/OpenMetadata that referenced this pull request Apr 12, 2026
…data#27157)

* adding working basic version of iomete connector

* mark these release as beta version

* add final parts

* integrate latest version

* fixing tests

* add docs for fields

* Update generated TypeScript types

* fix more formating

---------

Co-authored-by: Sanan <sanan@iomete.com>
Co-authored-by: Sriharsha Chintalapani <harshach@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants