Cette page explique comment remplacer la configuration du délai d'expiration par défaut et comment définir une stratégie de nouvelle tentative à l'aide des bibliothèques clientes Spanner.
Les bibliothèques clientes utilisent les paramètres de délai d'expiration et de stratégie de nouvelle tentative définis par défaut dans les fichiers de configuration suivants.
- spanner_grpc_service_config.json
- spanner_admin_instance_grpc_service_config.json
- spanner_admin_database_grpc_service_config.json
Dans les fichiers de configuration, le délai avant expiration par défaut pour les opérations qui prennent peu de temps, comme CreateSession
, est de 30 secondes. Les opérations plus longues, telles que les requêtes ou les lectures, ont un délai avant expiration par défaut de 3 600 secondes. Nous vous recommandons d'utiliser ces valeurs par défaut. Toutefois, vous pouvez si nécessaire définir un délai d'expiration ou une stratégie de nouvelle tentative personnalisé dans votre application.
Si vous décidez de modifier le délai d'expiration, définissez-le sur la durée réelle pendant laquelle l'application est configurée pour attendre le résultat.
Ne configurez pas de stratégie de nouvelle tentative plus agressive que la valeur par défaut, car un trop grand nombre de tentatives risquerait de surcharger le backend et de limiter vos requêtes.
Une stratégie de nouvelle tentative est définie dans chaque extrait, avec les caractéristiques suivantes:
- Un délai d'attente initial, ou de départ, avant de relancer la requête
- Un délai maximal
- Multiplicateur à utiliser avec le délai d'attente précédent pour calculer le délai d'attente suivant, jusqu'à atteindre la valeur maximale.
- Ensemble de codes d'erreur pour les opérations de nouvelle tentative.
Dans l'exemple suivant, un délai d'expiration de 60 secondes est défini pour l'opération donnée.
Si l'opération prend plus de temps que ce délai, elle échoue avec une erreur DEADLINE_EXCEEDED
.
Si l'opération échoue avec un code d'erreur UNAVAILABLE
, par exemple en cas de problème réseau temporaire, l'opération est réexécutée. Le client attend 500 ms avant de commencer la première tentative de nouvelle tentative. Si la première nouvelle tentative échoue, le client attend 1,5 * 500 ms = 750 ms avant de lancer la deuxième tentative. Ce délai de nouvelle tentative continue d'augmenter jusqu'à ce que l'opération aboutisse ou atteigne le délai maximal de nouvelle tentative de 16 secondes. L'opération échoue avec une erreur DEADLINE_EXCEEDED
si le temps total consacré à l'exécution de l'opération dépasse la valeur de délai avant expiration totale de 60 secondes.