apache / apache/airflow

Replace `airflow.utils.state` import with `airflow.sdk` in OpenSearch Provider

Open
#72,409 2 comments 0 reactions 1 assignee Claimed by @atamagrawal View on GitHub
area:providers contributors-workshop kind:task provider:opensearch
Dominant language
Python
Stars
46.9k
Forks
17.8k
Avg merge
2d 9h
Merged PRs (30d)
472

Description

## Description

> This is an issue that is reserved for the Airflow Summit "Contributors" Workshop. This is denoted with the label `contributors-workshop`. Out of respect for the organizers and participants of this workshop, **please do not implement a PR that addresses this issue.**
>
> If this issue is still open following Airflow Summit, the label will be removed and the issue can be picked up.

Sub-issue of #62063, which investigates provider usage of `airflow.utils` imports so they can be replaced with Task SDK equivalents and reduce the `airflow-core` dependency in providers.

| | |
| --- | --- |
| Provider | opensearch |
| Import | `TaskInstanceState` from `airflow.utils.state` |
| Replacement | `airflow.sdk.TaskInstanceState` |
| Shape | Import-only change in a single file |

opensearch requires `apache-airflow>=3.0.0` (see `providers/opensearch/pyproject.toml`), so `airflow.sdk` is always available and no version guard is needed here, unlike most other providers that still support Airflow 2.11+. `airflow.sdk.TaskInstanceState` and `airflow.utils.state.TaskInstanceState` are two independently defined `(str, Enum)` classes with matching member names and string values, so this is a plain import swap with no behavior change.

### What needs to change

Replace `from airflow.utils.state import TaskInstanceState` with `from airflow.sdk import TaskInstanceState` in:

- `providers/opensearch/src/airflow/providers/opensearch/log/os_task_handler.py:53`, used later in the file at `ti.state in (TaskInstanceState.RUNNING, TaskInstanceState.DEFERRED)`

No other code in this file needs to change, only the import line.

### How to verify it

The existing unit tests should pass unmodified, since the enum values are identical:

```bash
breeze testing providers-tests providers/opensearch/tests/unit/opensearch/log/test_os_task_handler.py
```

## Definition of Done

1. Update the import in `log/os_task_handler.py`.
2. Confirm no other `airflow.utils.state` usage remains in `providers/opensearch/src` (`grep -rn "airflow.utils.state" providers/opensearch/src`).
3. No new tests are needed, this is a like-for-like import swap, existing tests should pass unmodified.
4. This should pass:

```bash
breeze testing providers-tests --test-type "Providers[opensearch]"
```

---
Drafted-by: Claude Code (Sonnet 5); reviewed and edited by @jroachgolf84 before posting

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.