Если у вас возникли проблемы, ознакомьтесь с информацией в разделах ниже.
Статус "Потеряно" в Fleet Engine
При работе с Fleet Engine учитывайте возможные сбои. Например, если вы отправите в Fleet Engine запрос на обновление транспортного средства, в ответ может прийти сообщение о том, что такого транспортного средства не существует. Затем ваша реализация должна воссоздать транспортное средство в новом состоянии.
В крайне маловероятном случае катастрофического сбоя Fleet Engine вам может потребоваться заново создать большинство или все транспортные средства и задачи. Если частота создания станет слишком высокой, некоторые запросы могут снова завершиться ошибкой из-за проблем с квотой, поскольку проверки квот выполняются во избежание атак типа "отказ в обслуживании" (DOS). В этом случае снизьте частоту повторного создания, используя стратегию экспоненциальной задержки.
Повторные попытки
Убедитесь, что в вашей системе реализованы повторные попытки отправки запросов в Fleet Engine, поскольку они могут иногда завершаться неудачно. Клиентские библиотеки Fleet Engine по умолчанию отправляют повторные запросы.
Потеря состояния в приложении для водителей
Если приложение водителя аварийно завершает работу, оно должно воссоздать текущее состояние в Driver SDK. Приложение должно попытаться воссоздать задачи, чтобы убедиться, что они существуют, и восстановить их текущее состояние. Приложение также должно воссоздать и явно задать список остановок для Driver SDK.
Примечание. Восстановление должно выполняться автономно, без использования информации из Fleet Engine, за исключением ошибок, указывающих, существует ли объект в базе данных и когда он был создан. Если объект уже существует, то эта ошибка может быть поглощена, а объект может быть обновлен с использованием его идентификатора.
Ошибки, связанные с превышением срока
Если при вызове Fleet Engine вы получаете ошибку DEADLINE_EXCEEDED, значит время ожидания запроса превысило заданное значение. В клиентских библиотеках Fleet Engine есть время ожидания по умолчанию, но его можно изменить.
Общую информацию о сроках gRPC можно найти в статье gRPC и сроки.
Чтобы настроить крайний срок при использовании клиентской библиотеки Fleet Engine Java, вы можете изменить настройки повторных попыток RPC. В примере ниже показано, как настроить собственное время ожидания при настройке 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());
Типичные ошибки API
В этом разделе перечислены распространенные ошибки API, их причины и способы устранения.
NOT_FOUND (HTTP 404)
Не удалось найти запрошенный объект (например, транспортное средство, рейс или задачу).
- Причина. Обычно эта ошибка возникает при попытке получить, обновить или удалить объект, используя идентификатор, которого нет в базе данных.
- Решение. Прежде чем пытаться получить доступ к объекту, убедитесь, что его идентификатор указан правильно и объект был успешно создан.
ALREADY_EXISTS (HTTP 409)
Объект, который вы пытаетесь создать, уже существует.
- Причина. Вызов метода создания (например,
CreateVehicleилиCreateTrip) с идентификатором, который уже используется. - Решение. Обновите существующий объект или используйте новый уникальный идентификатор для запроса на создание.
PERMISSION_DENIED (HTTP 403)
У вас нет разрешений, необходимых для выполнения запроса.
- Причина. Обычно это происходит, если в веб-токене JSON (JWT) отсутствуют правильные утверждения или у сервисного аккаунта, подписывающего JWT, нет необходимых ролей IAM. Например, "JWT does not contain a matching scope for requested trip" (JWT не содержит подходящую область действия для запрошенной поездки).
- Решение. Проверьте разрешения сервисного аккаунта и убедитесь, что утверждения JWT включают правильные области действия для объекта, к которому вы пытаетесь получить доступ.
INVALID_ARGUMENT (HTTP 400)
Один или несколько аргументов, переданных в запросе, недействительны.
- Причина. Это может произойти по разным причинам, например если вы указали значение, выходящее за пределы допустимого диапазона (например, максимальную вместимость), не заполнили обязательное поле (например,
VehicleType) или указали недопустимые координаты пункта выдачи. - Решение. Проверьте сообщение об ошибке для конкретного недопустимого поля и убедитесь, что ваш запрос соответствует спецификации API.
FAILED_PRECONDITION (HTTP 400)
Операция отклонена, так как система не находится в состоянии, необходимом для ее выполнения.
- Причина. Обычно это происходит при попытке изменить статус рейса
COMPLETEилиCANCELEDна другой или назначить задачуCLOSEDтранспортному средству. - Решение. Убедитесь, что текущее состояние объекта позволяет выполнить операцию. Проверьте сообщение об ошибке, чтобы узнать, какие именно правила нарушены.
UNAVAILABLE (HTTP 503)
Сервис недоступен.
- Причина. Временная проблема с сервисом Fleet Engine.
- Решение. Запрос можно повторить с экспоненциальной выдержкой.