一般的な問題のトラブルシューティング

問題が発生した場合は、次のセクションをご覧ください。

Fleet Engine の紛失状態

Fleet Engine を使用する場合は、障害を想定して実装を設計します。たとえば、車両を更新するリクエストを Fleet Engine に送信すると、車両が存在しないことを示すエラーが返されることがあります。実装では、新しい状態で車両を再作成する必要があります。

Fleet Engine で致命的な障害が発生する可能性は極めて低いですが、そのような場合は、ほとんどまたはすべての車両とタスクを再作成する必要があります。作成率が高すぎると、サービス拒否攻撃(DOS)を回避するために割り当てチェックが実施されるため、割り当ての問題により一部のリクエストが再度失敗することがあります。この場合は、再試行のバックオフ戦略を使用して再作成率を下げます。

再試行数

Fleet Engine へのリクエストは失敗することがあるため、システムでリクエストの再試行を実装してください。Fleet Engine クライアント ライブラリは、デフォルトで再試行を行います。

ドライバーアプリの紛失状態

ドライバーアプリがクラッシュした場合、アプリは Driver SDK 内で現在の状態を再作成する必要があります。アプリは、タスクが存在することを確認し、現在の状態を復元するために、タスクの再作成を試みる必要があります。また、アプリは、Driver SDK の停車地リストを再作成して明示的に設定する必要があります。

注: これらの復元は、Fleet Engine からの情報に依存せずに自律的に行う必要があります。ただし、エンティティがデータベースにすでに存在するかどうか、いつ存在するかを示すエラーは除きます。エンティティがすでに存在する場合は、そのエラーを吸収し、ID を使用してエンティティを更新できます。

期限超過エラー

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)

リクエストされたエンティティ(車両、ルート、タスクなど)が見つかりませんでした。

  • 原因: 通常、データベースに存在しない ID を使用してエンティティを取得、更新、削除しようとした場合に発生します。
  • 修復: エンティティ ID が正しいこと、およびエンティティが正常に作成されていることを確認してから、アクセスを試みてください。

ALREADY_EXISTS(HTTP 409)

作成しようとしているエンティティはすでに存在します。

  • 原因: すでに使用されている ID で作成メソッド(CreateVehicle や CreateTrip など)を呼び出したことが原因です。
  • 修復: 代わりに既存のエンティティを更新するか、作成リクエストに新しい一意の ID を使用します。

PERMISSION_DENIED(HTTP 403)

リクエストを完了するために必要な権限がありません。

  • 原因: 通常、このエラーは、JSON Web Token(JWT)に正しいクレームがない場合、または JWT に署名するサービス アカウントに必要な IAM ロールがない場合に発生します。例: 「JWT does not contain a matching scope for requested trip.」
  • 解決策: サービス アカウントの権限を確認し、JWT クレームに、アクセスしようとしているエンティティの正しいスコープが含まれていることを確認します。

INVALID_ARGUMENT(HTTP 400)

リクエストで渡された 1 つ以上の引数が無効です。

  • 原因: 範囲外の値(最大容量など)を指定した、必須フィールド(VehicleType など)を指定していない、乗車地点に無効な座標を指定したなど、さまざまな理由で発生する可能性があります。
  • 改善策: 無効な特定のフィールドのエラー メッセージを確認し、リクエストが API 仕様に準拠していることを確認します。

FAILED_PRECONDITION(HTTP 400)

システムがオペレーションの実行に必要な状態ではないため、オペレーションが拒否されました。

  • 原因: 一般的な原因としては、COMPLETE または CANCELED のルートを別の状態に変更しようとしたり、CLOSED タスクを車両に割り当てようとしたりすることが挙げられます。
  • 修復: エンティティの現在の状態が、試行しているオペレーションを許可していることを確認します。エラー メッセージで、特定の状態違反を確認します。

UNAVAILABLE(HTTP 503)

サービスを利用できません。

  • 原因: Fleet Engine サービスの一時的な問題を示しています。
  • 修復: 指数バックオフを使用してリクエストを安全に再試行できます。