aws / aws/aws-xray-sdk-python

Support boto3 S3 transfer manager

Ouverte
#52 14 commentaires 15 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

enhancement
Langage dominant
Python
Étoiles
339
Forks
147
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

[boto3](https://github.com/boto/boto3) has a few high-level S3 API calls like `upload_file`, `download_file` which depends on [s3transfer](https://github.com/boto/s3transfer) to perform multi-threaded object puts/gets to increase through put. This will result in a `SegmentNotFoundException` as the X-Ray recorder tries to capture the "real" S3 API call but it loses the context because the actual http call is in a worker thread from the thread pool.

The S3 transfer manager under the hood uses `futures.ThreadPoolExecutor` per https://github.com/boto/s3transfer/blob/develop/s3transfer/futures.py#L370 but there is no proper API on `boto3` client level to propagate context from user code. And requiring user code changes is not a good customer experience.

The SDK should somehow monkey-patch S3 transfer manager so that it automatically propagate context to all worker threads so each http outbound call is captured and attached to its parent segment or subsegment properly.

Library `django-storages` or any storage library that supports S3 as back-end and uses `boto3` certain APIs might face the same issue.

More detailed technical deep dive could be found here: https://github.com/aws/aws-xray-sdk-python/issues/4.

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par les APIs S3 de boto3 mentionnées dans l’issue, en particulier upload_file et download_file, puis lisez s3transfer/futures.py autour de l’implémentation référencée de ThreadPoolExecutor. Utilisez l’issue liée de aws-xray-sdk-python pour l’analyse technique approfondie. Le travail est terminé lorsque les appels HTTP des worker threads sont capturés et associés à leur segment ou sous-segment parent sans nécessiter de modifications du code utilisateur.

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

Évaluation

Stack technique
aws, python
Domaine
backend-api-design, cloud
Type d'issue
Fonctionnalité
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

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