Skip to content

Conversation

@HsiuChuanHsu
Copy link
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
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
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
abdulrahman305 bot pushed a commit to abdulrahman305/airflow that referenced this pull request Sep 30, 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
abdulrahman305 bot pushed a commit to abdulrahman305/airflow that referenced this pull request Oct 1, 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
abdulrahman305 bot pushed a commit to abdulrahman305/airflow that referenced this pull request Oct 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
abdulrahman305 bot pushed a commit to abdulrahman305/airflow that referenced this pull request Oct 3, 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
abdulrahman305 bot pushed a commit to abdulrahman305/airflow that referenced this pull request Oct 4, 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
abdulrahman305 bot pushed a commit to abdulrahman305/airflow that referenced this pull request Oct 5, 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
abdulrahman305 bot pushed a commit to abdulrahman305/airflow that referenced this pull request Oct 5, 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
abdulrahman305 bot pushed a commit to abdulrahman305/airflow that referenced this pull request Oct 7, 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
abdulrahman305 bot pushed a commit to abdulrahman305/airflow that referenced this pull request Oct 8, 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
abdulrahman305 bot pushed a commit to abdulrahman305/airflow that referenced this pull request Oct 9, 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
abdulrahman305 bot pushed a commit to abdulrahman305/airflow that referenced this pull request Oct 10, 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
abdulrahman305 bot pushed a commit to abdulrahman305/airflow that referenced this pull request Oct 11, 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
abdulrahman305 bot pushed a commit to abdulrahman305/airflow that referenced this pull request Oct 12, 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
abdulrahman305 bot pushed a commit to abdulrahman305/airflow that referenced this pull request Oct 14, 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
abdulrahman305 bot pushed a commit to abdulrahman305/airflow that referenced this pull request Oct 15, 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
abdulrahman305 bot pushed a commit to abdulrahman305/airflow that referenced this pull request Oct 17, 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
abdulrahman305 bot pushed a commit to abdulrahman305/airflow that referenced this pull request Oct 19, 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
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