googleapis / googleapis/google-cloud-ruby
Pub/Sub: Retries when publishing
Personne n'a encore pris cette issue.
- Langage dominant
- Ruby
- Étoiles
- 1.4k
- Forks
- 578
- Merge moyen
- 1 j 11 h
- PR mergées (30 j)
- 166
Description
Environment details
- OS: Ubuntu
- Ruby version: 3.1.2
- Gem name and version:
google-cloud-pubsub (2.15.1)
Steps to reproduce
Not sure if this is a bug or intended, but two things:
- If an error happens during publishing, using the async publisher, it is not retried unless you also supply an ordering key:
rescue StandardError => e
items = batch.items
unless batch.ordering_key.empty?
retry if publish_batch_error_retryable? e # why are retries only done when ordering key present?
This was added in: https://github.com/googleapis/google-cloud-ruby/pull/3685. How come retrying in case of errors should not be done if you don't have an ordering key? Or is that a bug?
- If you do have an ordering key, it will retry any of the following errors, indefinitely:
PUBLISH_RETRY_ERRORS = [
GRPC::Cancelled, GRPC::DeadlineExceeded, GRPC::Internal,
GRPC::ResourceExhausted, GRPC::Unauthenticated, GRPC::Unavailable
].freeze
Consulting the documentation (https://cloud.google.com/pubsub/docs/reference/error-codes) it looks like some of these are incorrect. For instance GRPC::Unauthenticated should not be retried, and GRPC::ResourceExhausted should be retried with exponential backoff. It seems like it would be a problem if for instance GRPC::Unauthenticated keeps retrying forever?
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par retracer la gestion des erreurs du publisher asynchrone autour de publish_batch_error_retryable? et PUBLISH_RETRY_ERRORS, dans le contexte de Ruby 3.1.2 et google-cloud-pubsub 2.15.1. Comparez le comportement des nouvelles tentatives avec la documentation des codes d’erreur de Pub/Sub et PR 3685, puis définissez des nouvelles tentatives finies et appropriées pour la publication avec et sans ordering keys.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- ruby
- Domaine
- distributed-systems
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100