From 309118d3dba5b95d0e44e916ae79a09741d0c942 Mon Sep 17 00:00:00 2001 From: Jens Scheffler Date: Mon, 12 Jan 2026 21:53:41 +0100 Subject: [PATCH 1/2] Improve Edge Worker error handling on HTTP 405 --- providers/edge3/src/airflow/providers/edge3/cli/worker.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/providers/edge3/src/airflow/providers/edge3/cli/worker.py b/providers/edge3/src/airflow/providers/edge3/cli/worker.py index 07ce39fddc5fc..7ffd2b5aaffe6 100644 --- a/providers/edge3/src/airflow/providers/edge3/cli/worker.py +++ b/providers/edge3/src/airflow/providers/edge3/cli/worker.py @@ -269,7 +269,8 @@ async def start(self): logger.error(str(e)) raise SystemExit(str(e)) except ClientResponseError as e: - if e.status == HTTPStatus.NOT_FOUND: + # Note: Method not allowed is raised by FastAPI if the API is not enabled (not 404) + if e.status in {HTTPStatus.NOT_FOUND, HTTPStatus.METHOD_NOT_ALLOWED}: raise SystemExit( "Error: API endpoint is not ready, please set [edge] api_enabled=True. Or check if the URL is correct to your deployment." ) From 72282436e6c1a9873a537ef8b9402c8bd4e03d41 Mon Sep 17 00:00:00 2001 From: Jens Scheffler Date: Mon, 12 Jan 2026 21:59:13 +0100 Subject: [PATCH 2/2] Add pytest --- .../edge3/tests/unit/edge3/cli/test_worker.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/providers/edge3/tests/unit/edge3/cli/test_worker.py b/providers/edge3/tests/unit/edge3/cli/test_worker.py index f4014a9a48e26..5a504b0c33681 100644 --- a/providers/edge3/tests/unit/edge3/cli/test_worker.py +++ b/providers/edge3/tests/unit/edge3/cli/test_worker.py @@ -396,12 +396,21 @@ async def test_version_mismatch(self, mock_set_state, worker_with_job): await worker_with_job.heartbeat() assert worker_with_job.drain + @pytest.mark.parametrize( + "http_error", + [ + pytest.param(404, id="HTTP 404 Not Found"), + pytest.param(405, id="HTTP 405 Method Not Allowed"), + ], + ) @patch("airflow.providers.edge3.cli.worker.worker_register") - async def test_start_missing_apiserver(self, mock_register_worker, worker_with_job: EdgeWorker): + async def test_start_missing_apiserver( + self, mock_register_worker, http_error, worker_with_job: EdgeWorker + ): mock_register_worker.side_effect = ClientResponseError( request_info=RequestInfo(url=URL("mock.com"), method="GET", headers=None), # type:ignore[arg-type] - message="Something with 404:NOT FOUND means API is not active", - status=404, + message=f"Something with {http_error}: Means API is not active", + status=http_error, history=(), ) with pytest.raises(SystemExit, match=r"API endpoint is not ready"):