googleapis / googleapis/google-cloud-ruby

Pub/Sub: Retries when publishing

Ouverte
#20,573 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

api: pubsub type: cleanup
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:

  1. 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?

  1. 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

  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 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

Recevez les nouvelles issues par e-mail

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