Skip to content

Replace API server’s direct Connection access workaround before 3.1 #52520

@amoghrajesh

Description

@amoghrajesh

Body

During the migration of BaseHook to task sdk, we are introducing a temporary workaround in the API server context:
https://github.com/apache/airflow/pull/51873/files#diff-acfa34467241916c1189174e98f87a4094e8cbf58d391fa084e6afb2594decbcR61-R71 to help solve some compat issues which arrived along the way.

When in the API server context, the system uses the Connection model (via custom backend > env var > DB fallback) directly.

This unblocks the bulk of the BaseHook removal work, but it’s not the ideal long-term solution. We should revisit this approach to avoid leaking this shortcut into 3.1 release.

This issue is dependent on coupling between Git bundle and API server. For view_url use case, a slim git bundle is instantiated to form the view_url leading to it using BaseHook to get a connection and BaseHook uses Connection from SDK, it goes back to API server causing a self loop scenario.

../../.venv/lib/python3.12/site-packages/pydantic/type_adapter.py:572: in dump_python
    return self.serializer.to_python(
../src/airflow/api_fastapi/core_api/datamodels/dag_versions.py:45: in bundle_url
    return DagBundlesManager().view_url(self.bundle_name, self.bundle_version)
../src/airflow/dag_processing/bundles/manager.py:168: in view_url
    bundle = self.get_bundle(name, version)
../src/airflow/dag_processing/bundles/manager.py:156: in get_bundle
    return class_(name=name, version=version, **kwargs)
../../providers/git/src/airflow/providers/git/bundles/git.py:88: in __init__
    self.hook = GitHook(git_conn_id=git_conn_id)
../../providers/git/src/airflow/providers/git/hooks/git.py:73: in __init__
    connection = self.get_connection(git_conn_id)
../../task-sdk/src/airflow/sdk/bases/hook.py:61: in get_connection
    conn = Connection.get(conn_id)
../../task-sdk/src/airflow/sdk/definitions/connection.py:152: in get
    return _get_connection(conn_id)
../../task-sdk/src/airflow/sdk/execution_time/context.py:162: in _get_connection
    return _convert_connection_result_conn(msg)
../../task-sdk/src/airflow/sdk/execution_time/context.py:108: in _convert_connection_result_conn
    return Connection(**conn_result.model_dump(exclude={"type"}, by_alias=True))
E   TypeError: Connection.__init__() missing 2 required positional arguments: 'conn_id' and 'conn_type'

Committer

  • I acknowledge that I am a maintainer/committer of the Apache Airflow project.

Metadata

Metadata

Assignees

Labels

area:APIAirflow's REST/HTTP APIkind:metaHigh-level information important to the community

Type

No type

Projects

Status

Done

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions