Résoudre les problèmes courants

Consultez les sections suivantes pour obtenir de l'aide en cas de problème.

État "Perdu" dans Fleet Engine

Lorsque vous travaillez avec Fleet Engine, concevez votre implémentation pour anticiper les échecs. Par exemple, si vous envoyez une requête à Fleet Engine pour mettre à jour un véhicule, il peut répondre par une erreur indiquant que le véhicule n'existe pas. Votre implémentation doit ensuite recréer le véhicule dans le nouvel état.

Dans le cas extrêmement improbable d'une défaillance catastrophique de Fleet Engine, vous devrez peut-être recréer la plupart ou la totalité des véhicules et des tâches. Si le taux de création devient trop élevé, certaines requêtes peuvent à nouveau échouer en raison de problèmes de quota, car des vérifications de quota sont en place pour éviter les attaques par déni de service (DOS). Dans ce cas, ralentissez le taux de recréation à l'aide d'une stratégie de report pour les nouvelles tentatives.

Tentatives

Assurez-vous que votre système implémente des tentatives pour les requêtes adressées à Fleet Engine, car elles peuvent échouer de temps en temps. Les bibliothèques clientes Fleet Engine effectuent des nouvelles tentatives par défaut.

État "Perdu" dans l'application chauffeur

Si l'application chauffeur plante, elle doit recréer l'état actuel dans le Driver SDK. L'application doit tenter de recréer les tâches pour s'assurer qu'elles existent et restaurer leur état actuel. L'application doit également recréer et définir explicitement la liste des arrêts pour le Driver SDK.

Remarque : Ces restaurations doivent être effectuées de manière autonome, sans s'appuyer sur les informations de Fleet Engine, à l'exception des erreurs indiquant si et quand une entité existe déjà dans la base de données. Si une entité existe déjà, cette erreur peut être absorbée et l'entité peut être mise à jour à l'aide de son ID.

Erreurs de dépassement du délai

Si vous recevez une erreur DEADLINE_EXCEEDED lorsque vous appelez Fleet Engine, cela signifie que la requête a pris plus de temps que le délai d'inactivité configuré. Les bibliothèques clientes Fleet Engine ont des délais d'attente par défaut, mais vous devrez peut-être les ajuster.

Pour obtenir des informations générales sur les délais gRPC, consultez gRPC et les délais.

Pour configurer le délai lorsque vous utilisez la bibliothèque cliente Java Fleet Engine, vous pouvez ajuster les paramètres de nouvelle tentative RPC. L'exemple suivant montre comment configurer un délai avant expiration personnalisé lors de la configuration de VehicleService :

VehicleServiceSettings.Builder settingsBuilder = VehicleServiceSettings.newBuilder();

// Set the timeout to 10 seconds.
settingsBuilder
    .getVehicleSettings()
    .setRetrySettings(
        settingsBuilder.getVehicleSettings().getRetrySettings().toBuilder()
            .setTotalTimeout(java.time.Duration.ofSeconds(10))
            .build());

VehicleServiceClient client = VehicleServiceClient.create(settingsBuilder.build());

Erreurs d'API courantes

Cette section liste les erreurs d'API courantes que vous pouvez rencontrer, leurs causes et comment les résoudre.

NOT_FOUND (HTTP 404)

L'entité demandée (comme un véhicule, un trajet ou une tâche) est introuvable.

  • Cause : généralement due à une tentative d'obtention, de mise à jour ou de suppression d'une entité à l'aide d'un ID qui n'existe pas dans la base de données.
  • Correction : vérifiez que l'ID de l'entité est correct et que l'entité a été créée correctement avant d'essayer d'y accéder.

ALREADY_EXISTS (HTTP 409)

L'entité que vous essayez de créer existe déjà.

  • Cause : cette erreur se produit lorsque vous appelez une méthode de création (comme CreateVehicle ou CreateTrip) avec un ID déjà utilisé.
  • Solution : Mettez à jour l'entité existante ou utilisez un nouvel ID unique pour la demande de création.

PERMISSION_DENIED (HTTP 403)

Vous ne disposez pas des autorisations nécessaires pour effectuer cette demande.

  • Cause : Cela se produit généralement si votre jeton Web JSON (JWT) ne contient pas les revendications appropriées ou si le compte de service qui signe le jeton JWT ne dispose pas des rôles IAM requis. Par exemple, "Le JWT ne contient pas de champ d'application correspondant au trajet demandé."
  • Solution : Vérifiez les autorisations de votre compte de service et assurez-vous que vos revendications JWT incluent les bons niveaux d'accès pour l'entité à laquelle vous essayez d'accéder.

INVALID_ARGUMENT (HTTP 400)

Un ou plusieurs arguments transmis dans la requête ne sont pas valides.

  • Cause : cela peut se produire pour diverses raisons, par exemple si vous avez fourni une valeur hors plage (par exemple, la capacité maximale), si vous avez oublié de renseigner un champ obligatoire (par exemple, un VehicleType) ou si vous avez indiqué des coordonnées non valides pour un point de retrait.
  • Correction : examinez le message d'erreur pour identifier le champ spécifique qui n'est pas valide et assurez-vous que votre demande est conforme aux spécifications de l'API.

FAILED_PRECONDITION (HTTP 400)

L'opération a été rejetée, car le système n'est pas dans un état requis pour exécuter l'opération.

  • Cause : les causes courantes incluent la tentative de modification d'un trajet COMPLETE ou CANCELED vers un autre État, ou la tentative d'attribution d'une tâche CLOSED à un véhicule.
  • Correction : assurez-vous que l'état actuel de l'entité permet l'opération que vous tentez d'effectuer. Consultez le message d'erreur pour connaître les cas spécifiques de non-respect des règles de l'État.

UNAVAILABLE (HTTP 503)

Le service est indisponible.

  • Cause : cela indique un problème temporaire avec le service Fleet Engine.
  • Correction : la requête peut être réessayée en toute sécurité avec un intervalle exponentiel entre les tentatives.