Azure / Azure/azure-functions-python-worker

[Bug] PYTHON_ENABLE_OPENTELEMETRY=true crashes every async invocation (NoneType.extract) on v2 runtime, Python 3.13

Ouverte Adaptée aux débutants
#1,881 2 commentaires 2 réactions 0 personnes assignées Voir sur GitHub
bug python
Langage dominant
Python
Étoiles
357
Forks
116
Merge moyen
32 min
PR mergées (30 j)
1

Description

### Expected Behavior

With `host.json` `telemetryMode: OpenTelemetry` and app setting `PYTHON_ENABLE_OPENTELEMETRY=true`, async functions should invoke normally (the worker should either initialize the OpenTelemetry trace-context propagator or no-op safely)

### Actual Behavior

Every async invocation returns HTTP 500. In v2 `worker_init` (runtimes/v2/azure_functions_runtime/handle_event.py), `PYTHON_ENABLE_OPENTELEMETRY=true` only calls `otel_manager.set_otel_libs_available(True)` and never calls `update_opentelemetry_status()` (unlike the `PYTHON_APPLICATIONINSIGHTS_ENABLE_TELEMETRY` path). The propagator stays None, so per-invocation context activation crashes:

AttributeError: 'NoneType' object has no attribute 'extract'
File ".../azure_functions_runtime/otel.py", line 112, in configure_opentelemetry
ctx = otel_manager.get_trace_context_propagator().extract(carrier)

Removing the setting makes the app healthy. Appears to be the crash manifestation of #1870.

### Steps to Reproduce

1. Deploy a Python 3.13 Flex Consumption function app with an async HTTP trigger.
2. `host.json`: `{ "version": "2.0", "telemetryMode": "OpenTelemetry" }`.
3. Add app setting `PYTHON_ENABLE_OPENTELEMETRY=true`.
4. Call any async function -> HTTP 500 with the AttributeError above.
5. Remove `PYTHON_ENABLE_OPENTELEMETRY` -> healthy.

### Relevant code being tried

```shell
host.json: `{ "version": "2.0", "telemetryMode": "OpenTelemetry" }`

App setting:  PYTHON_ENABLE_OPENTELEMETRY=true 
(App also calls  azure.monitor.opentelemetry.configure_azure_monitor(...) at startup; removing that call does not change the crash.)
```

### Relevant log output

```shell
AttributeError: 'NoneType' object has no attribute 'extract'
File ".../azure_functions_runtime/otel.py", line ~112, in configure_opentelemetry
ctx = otel_manager.get_trace_context_propagator().extract(carrier)
```

### requirements.txt file

```shell
azure-functions
azure-functions-durable
azure-monitor-opentelemetry
```

### Where are you facing this problem?

Production Environment (explain below)

### Function app name

_No response_

### Additional Information

Hosting: Azure Functions Flex Consumption (FC1), Python 3.13, v2 azure_functions_runtime.

Related:
#1870 (worker-side auto-init gap),
#1626 (late context propagation).

Suggested fix: call  update_opentelemetry_status()  in the  PYTHON_ENABLE_OPENTELEMETRY  branch of worker_init  (symmetric to the App Insights path), and/or add a  None  guard in  configure_opentelemetry() .

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez dans runtimes/v2/azure_functions_runtime/handle_event.py, au niveau de worker_init, et comparez la branche PYTHON_ENABLE_OPENTELEMETRY avec le chemin PYTHON_APPLICATIONINSIGHTS_ENABLE_TELEMETRY. Examinez ensuite runtimes/v2/azure_functions_runtime/otel.py, au niveau de configure_opentelemetry ; le travail est terminé lorsque les invocations asynchrones n’échouent plus lorsque le paramètre est activé et que le contexte de trace est initialisé ou géré de manière sûre.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
azure, python
Domaine
backend, observability-sre
Type d'issue
Bug
Difficulté
2/5
Temps estimé
1-3 heures
Activité
Active
Clarté
Clairement spécifiée
Accessibilité débutants
78/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.