From aa05da10c6bdd4f4aaedd9bd7f7001421a0d1d3c Mon Sep 17 00:00:00 2001 From: LIU ZHE YOU Date: Fri, 3 Jul 2026 15:03:03 +0900 Subject: [PATCH] Add running_pod_log_lines config option to KubernetesExecutor The number of log lines fetched from a running task's pod was a hardcoded class constant (100), so deployments could not tune how much of a running task's log is visible in the UI without patching the executor. --- providers/cncf/kubernetes/provider.yaml | 8 ++++++++ .../cncf/kubernetes/executors/kubernetes_executor.py | 4 ++++ .../providers/cncf/kubernetes/get_provider_info.py | 7 +++++++ .../cncf/kubernetes/executors/test_kubernetes_executor.py | 7 +++++++ 4 files changed, 26 insertions(+) diff --git a/providers/cncf/kubernetes/provider.yaml b/providers/cncf/kubernetes/provider.yaml index 5d9441191635d..c29d6b3b58a4f 100644 --- a/providers/cncf/kubernetes/provider.yaml +++ b/providers/cncf/kubernetes/provider.yaml @@ -281,6 +281,14 @@ config: type: boolean example: ~ default: "False" + running_pod_log_lines: + description: | + Number of lines read from the end of a running task's pod log when the task log + is served through the kube API, e.g. when viewing logs of a running task in the UI. + version_added: 10.20.0 + type: integer + example: ~ + default: "100" pod_template_file: description: | Path to the YAML pod file that forms the basis for KubernetesExecutor workers. diff --git a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor.py b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor.py index 46137915afbbe..48ce1e1ad2ffc 100644 --- a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor.py +++ b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor.py @@ -120,6 +120,10 @@ def __init__(self, *args, **kwargs): self.task_publish_max_retries = self.conf.getint( "kubernetes_executor", "task_publish_max_retries", fallback=0 ) + # Shadows the class-level default with the configured value for this instance. + self.RUNNING_POD_LOG_LINES = self.conf.getint( + "kubernetes_executor", "running_pod_log_lines", fallback=self.RUNNING_POD_LOG_LINES + ) self.completed: dict[tuple[str, str], KubernetesResults] = {} self.create_pods_after: datetime | None = None diff --git a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/get_provider_info.py b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/get_provider_info.py index e0cfbecf3b273..da320501175a9 100644 --- a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/get_provider_info.py +++ b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/get_provider_info.py @@ -154,6 +154,13 @@ def get_provider_info(): "example": None, "default": "False", }, + "running_pod_log_lines": { + "description": "Number of lines read from the end of a running task's pod log when the task log\nis served through the kube API, e.g. when viewing logs of a running task in the UI.\n", + "version_added": "10.20.0", + "type": "integer", + "example": None, + "default": "100", + }, "pod_template_file": { "description": "Path to the YAML pod file that forms the basis for KubernetesExecutor workers.\n", "version_added": None, diff --git a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/executors/test_kubernetes_executor.py b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/executors/test_kubernetes_executor.py index 285b263b064e1..1f7ca7f695bf7 100644 --- a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/executors/test_kubernetes_executor.py +++ b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/executors/test_kubernetes_executor.py @@ -640,6 +640,13 @@ def test_running_pod_log_lines(self): assert kube_executor.RUNNING_POD_LOG_LINES == 100 assert kube_executor_2.RUNNING_POD_LOG_LINES == 200 + @conf_vars({("kubernetes_executor", "running_pod_log_lines"): "500"}) + def test_running_pod_log_lines_from_config(self): + kube_executor = KubernetesExecutor() + + assert kube_executor.RUNNING_POD_LOG_LINES == 500 + assert KubernetesExecutor.RUNNING_POD_LOG_LINES == 100 + class TestKubernetesExecutor: """