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é, il est possible que certaines requêtes échouent à nouveau 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 d'intervalle entre les tentatives.
Tentatives
Assurez-vous que votre système implémente des tentatives pour les requêtes adressées à Fleet Engine, car elles peuvent parfois échouer. 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 pour 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 avant expiration configuré. Les bibliothèques clientes Fleet Engine ont des délais avant expiration 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.
- Solution : Vérifiez que l'ID d'entité est correct et que l'entité a été créée 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
CreateVehicleouCreateTrip) 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 la 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 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 fourni des coordonnées non valides pour un point de retrait. - Solution : Consultez le message d'erreur pour identifier le champ spécifique qui n'est pas valide et assurez-vous que votre demande est conforme à la spécification 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 de l'état d'un trajet
COMPLETEouCANCELED, ou la tentative d'attribution d'une tâcheCLOSEDà un véhicule. - Correction : assurez-vous que l'état actuel de l'entité autorise 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 relancée en toute sécurité avec un intervalle exponentiel entre les tentatives.