GitHub user Neon-Face created a discussion: [Bug] `standard.operators.python` 
fails the task randomly

### Apache Airflow version

3.0.3

### If "Other Airflow 2 version" selected, which one?

_No response_

### What happened?

Since I want to pass Airflow Variables from a regular `@task` to a 
`@task.virtualenv`, I first created a normal task to fetch the variables and 
then passed the resulting dictionary to the virtualenv task.

Here's the DAG code:
**Path:** `dags/test/dag_test.py`
(*Please note the file paths — I'm not entirely sure if separating DAG and task 
definitions like this is supported.*)

``` python
from airflow.sdk import dag, Param

@dag(
    dag_id="test",
    params={
        "P": Param("HI", type="string")
    }
)
def test():
    from utils.common_tools import clear_dag_xcom, load_vars_for_venv
    from utils.test import virtual_task

    variables = load_vars_for_venv(var_list=["DATASETTE_DB_SECRET"])
    t = virtual_task(variables=variables)
    c = clear_dag_xcom()

    t >> c

test()
```

here is my task code:
**Path**: `utils/test.py`

```python
from airflow.sdk import task

@task.virtualenv(
    python_version = "3.9",
    requirements="requirements_test.txt",
    system_site_packages = True,
    venv_cache_path="venvs/test",
    inherit_env = True
)
def virtual_task(variables:dict, logical_date = None, params = None):
    print(variables)
    print(f"This is param: {params} !!!!!") 
    print(f"This is logical_date: {logical_date} !!!!!") 
    return
```

and here is my common tasks (to improve reusability)
**Path**: `utils/common_tools.py`

```python
from airflow.sdk import task

@task(task_id="load_vars_for_venv")
def load_vars_for_venv(var_list:list):
    from airflow.sdk import Variable
    variables = {}
    for variable in var_list:
        variables[variable] = Variable.get(variable)
    return variables

@task(task_id = "clear_dag_xcom")
def clear_dag_xcom(run_id = None): # I also created this to clean XCOM data if 
the dag succeeded
    import os
    from airflow.sdk import Variable
    airflow_db_path = Variable.get("AIRFLOW_DB_SECRET")
    sql = f"DELETE FROM xcom WHERE run_id='{run_id}';"
    print(sql)
    os.system(f'sqlite3 {airflow_db_path} "{sql}"')
    return 
```

However, the load_vars_for_venv task is quite unstable — it works 
intermittently. When it fails, there are no logs shown, making it difficult to 
debug.
<img width="1920" height="998" alt="Image" 
src="https://github.com/user-attachments/assets/5095c637-71fa-4a39-b398-4150a1164c7a";
 />


and the scheduler shows:
``` scheduler
2025-08-07 12:02:42 [info] Secrets backends loaded for worker [supervisor] 
backend_classes=['EnvironmentVariablesBackend'] count=1        
[2025-08-07T12:02:42.594+0000] {_client.py:1026} INFO - HTTP Request: PATCH 
http://localhost:8080/execution/task-instances/01988469-7ada-7fee-b
011-bba401a05876/run "HTTP/1.1 409 Conflict"                                    
                                                               
2025-08-07 12:02:42 [warning] Server error [airflow.sdk.api.client] 
detail={'detail': {'reason': 'invalid_state', 'message'
: 'TI was not in a state where it could be marked as running', 
'previous_state': 'scheduled'}}                                                 
2025-08-07 12:02:42 [info] Process exited [supervisor] 
exit_code=<Negsignal.SIGKILL: -9> pid=516354 signal_sent=SIGKILL   
```
and

``` scheduler
[2025-08-07T12:02:42.611+0000] {local_executor.py:96} ERROR - uhoh
.......
  File 
"/home/....../Airflow/.venv/lib64/python3.9/site-packages/airflow/sdk/api/client.py",
 line 110, in get_json_error
    raise err
airflow.sdk.api.client.ServerResponseError: Server returned error
```

However, when I run the DAG using `airflow dags test test`, it consistently 
succeeds and produces the expected logs.

```
[2025-08-07T12:25:13.682+0000] {process_utils.py:196} INFO - 
{'DATASETTE_DB_SECRET': '......./datasette/insights.db'}
[2025-08-07T12:25:13.683+0000] {process_utils.py:196} INFO - This is param: 
{'P': 'HI'} !!!!!
[2025-08-07T12:25:13.683+0000] {process_utils.py:196} INFO - This is 
logical_date: 2025-08-07 12:25:10.918707+00:00 !!!!!
```
And you can see it's successful in airflow UI as well, but when I try to read 
the log in airflow UI, it shows "Could not read served logs: 404 Client Error: 
NOT FOUND for url......"

<img width="1920" height="999" alt="Image" 
src="https://github.com/user-attachments/assets/c2ddba76-3d3b-4441-abd9-8f064e936189";
 />


**So my questions are:**

1. Why does the `load_vars_for_venv` task behave inconsistently? Sometimes it 
works, other times it silently fails without any logs.
2. What are the exact differences between triggering a DAG via the **Airflow 
UI** and using the CLI command `airflow dags test`? Why does the CLI test 
consistently succeed, while the UI-triggered runs fail or get stuck?

Thanks for helping!




### What you think should happen instead?

variables(dict) should be passed to `@task.virtualenv` and variables can be 
used in the virtualenv.

### How to reproduce

Copy the code above and use the same file structure should be able to reproduce 
the problem.

### Operating System

Oracle Linux Server

### Versions of Apache Airflow Providers

```
apache-airflow-providers-celery==3.12.0
apache-airflow-providers-common-compat==1.7.1
apache-airflow-providers-common-io==1.6.0
apache-airflow-providers-common-sql==1.27.2
apache-airflow-providers-fab==2.2.1
apache-airflow-providers-http==5.3.1
apache-airflow-providers-smtp==2.1.0
apache-airflow-providers-standard==1.3.0
```

### Deployment

Other

### Deployment details

I installed locally using `uv`.

```
uv add "apache-airflow[celery,pandas,fab]==3.0.3" --constraint 
"https://raw.githubusercontent.com/apache/airflow/constraints-3.0.3/constraints-3.9.txt";
uv add ruff
uv add apache-airflow-providers-http
```

### Anything else?

_No response_

### Are you willing to submit PR?

- [x] Yes I am willing to submit a PR!

### Code of Conduct

- [x] I agree to follow this project's [Code of 
Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)


GitHub link: https://github.com/apache/airflow/discussions/54534

----
This is an automatically sent email for [email protected].
To unsubscribe, please send an email to: [email protected]

Reply via email to