Устранение неполадок

Если у вас возникнут какие-либо проблемы, обратитесь за помощью в следующие разделы.

Потерянное состояние в 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 Web Token (JWT) отсутствуют необходимые утверждения или если у учетной записи службы, подписывающей JWT, отсутствуют требуемые роли IAM. Например, "JWT не содержит соответствующей области действия для запрошенной поездки".
  • Решение проблемы : Проверьте права доступа вашей учетной записи службы и убедитесь, что ваши утверждения JWT содержат правильные области действия для сущности, к которой вы пытаетесь получить доступ.

INVALID_ARGUMENT (HTTP 400)

Один или несколько аргументов, переданных в запросе, являются недействительными.

  • Причина : Это может произойти по разным причинам, например, из-за указания значения, выходящего за пределы допустимого диапазона (например, максимальной вместимости), отсутствия обязательного поля (например, VehicleType ) или указания недопустимых координат для пункта погрузки.
  • Исправление : Просмотрите сообщение об ошибке для конкретного недействительного поля и убедитесь, что ваш запрос соответствует спецификации API.

FAILED_PRECONDITION (HTTP 400)

Операция была отклонена, поскольку система не находится в состоянии, необходимом для ее выполнения.

  • Причина : К распространенным причинам относятся попытка изменить статус поездки COMPLETE или CANCELED на другой штат, а также попытка назначить транспортному средству задачу CLOSED .
  • Исправление : Убедитесь, что текущее состояние объекта позволяет выполнить пытающуюся операцию. Проверьте сообщение об ошибке на наличие конкретных нарушений состояния.

UNAVAILABLE (HTTP 503)

Данная услуга недоступна.

  • Причина : Это указывает на временную проблему в работе службы Fleet Engine.
  • Исправление : Запрос можно безопасно повторить с экспоненциальной задержкой.