Segment context not propagated when `asyncio.run_in_executor` is used
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 339
- Forks
- 147
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
(Minimised) Example code:
import asyncio
from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch_all
from aws_xray_sdk.core.async_context import AsyncContext
import boto3
xray_recorder.configure(service="Test app", sampling=False, context=AsyncContext())
patch_all()
def run_task():
s3_client = boto3.client("s3")
s3_client.list_buckets()
async def main():
loop = asyncio.get_running_loop()
xray_recorder.begin_segment("test")
await loop.run_in_executor(None, run_task)
xray_recorder.end_segment()
asyncio.run(main())
Output:
cannot find the current segment/subsegment, please make sure you have a segment open
No segment found, cannot begin subsegment s3.
cannot find the current segment/subsegment, please make sure you have a segment open
cannot find the current segment/subsegment, please make sure you have a segment open
No segment to end
cannot find the current segment/subsegment, please make sure you have a segment open
I understand from the README that when using a thread pool (which is the default executor), the trace entity needs to be manually propagated. Could it be propagated automatically?
I'm asking because in the use case I have, a 3rd party library I'm using is making the call so I couldn't patch the call sites easily.
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con las indicaciones de la README sobre la propagación de trazas en grupos de hilos y el punto de entrada AsyncContext utilizado con loop.run_in_executor. Reproduce el ejemplo minimizado y, a continuación, rastrea cómo run_task obtiene el segmento actual y verifica que el ejemplo se completa sin mensajes de segmento ausente o subsegmento ausente cuando la propagación es automática.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- aws, python
- Área
- backend, observability-sre
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100