Skip to content

Fix: Handle Kubernetes API responses with non-JSON bodies#55107

Merged
potiuk merged 1 commit intoapache:mainfrom
HsiuChuanHsu:fix/k8s-429-non-json-response
Aug 31, 2025
Merged

Fix: Handle Kubernetes API responses with non-JSON bodies#55107
potiuk merged 1 commit intoapache:mainfrom
HsiuChuanHsu:fix/k8s-429-non-json-response

Conversation

@HsiuChuanHsu
Copy link
Copy Markdown
Contributor

Description

The Kubernetes API server's response body is not always guaranteed to be JSON. For example, in the case of a 429 (Too Many Requests) response, the body may be a plain string rather than JSON, causing json.loads() to fail with a JSONDecodeError.

https://github.com/kubernetes-client/python/blob/6e7c539f52dec4e993d2c32a4408920d8522f47e/kubernetes/base/dynamic/exceptions.py#L45C1-L77C1

This issue manifests in two key areas:

  • KubernetesExecutor: When handling ApiException during task publishing
  • KubernetesInstallKueueOperator: When processing FailToCreateError exceptions

Change Mades:

  1. KubernetesExecutor (kubernetes_executor.py):

    • Added try/catch block around json.loads(e.body)
    • Handle empty body cases by using e.reason as fallback
    • Handle non-JSON bodies (like 429 plain text responses) by wrapping in message structure
  2. KubernetesInstallKueueOperator (kueue.py):

    • Enhanced error body parsing with JSON fallback handling
    • Handle empty bodies using exception reason

Closes
Fixes #49244


^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in airflow-core/newsfragments.

- Add robust JSON parsing with fallback for API exception bodies

- Handle 429 responses and other cases where response body is plain text

- Update KubernetesExecutor to safely parse ApiException.body

- Update KubernetesInstallKueueOperator to handle non-JSON error bodies
@boring-cyborg boring-cyborg bot added area:providers provider:cncf-kubernetes Kubernetes (k8s) provider related issues labels Aug 31, 2025
Copy link
Copy Markdown
Member

@potiuk potiuk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very nice!

@potiuk potiuk merged commit 6c4cee7 into apache:main Aug 31, 2025
88 checks passed
@HsiuChuanHsu
Copy link
Copy Markdown
Contributor Author

Thanks for the review!

nothingmin pushed a commit to nothingmin/airflow that referenced this pull request Sep 2, 2025
- Add robust JSON parsing with fallback for API exception bodies

- Handle 429 responses and other cases where response body is plain text

- Update KubernetesExecutor to safely parse ApiException.body

- Update KubernetesInstallKueueOperator to handle non-JSON error bodies
@HsiuChuanHsu HsiuChuanHsu deleted the fix/k8s-429-non-json-response branch September 9, 2025 22:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:providers provider:cncf-kubernetes Kubernetes (k8s) provider related issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Scheduler fail to handle Kubernetes 429 responses with non-JSON body

3 participants