問題が発生した場合は、以下のセクションをご覧ください。
Fleet Engine の Lost 状態
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 にリクエストされた乗車に一致するスコープが含まれていません。」
- 修復: サービス アカウントの権限を確認し、JWT クレームにアクセスしようとしているエンティティの正しいスコープが含まれていることを確認します。
INVALID_ARGUMENT(HTTP 400)
リクエストで渡された引数の 1 つ以上が無効です。
- 原因: これは、範囲外の値(最大容量など)を指定した場合、必須フィールド(
VehicleTypeなど)が指定されていない場合、乗車場所の無効な座標を指定した場合など、さまざまな理由で発生する可能性があります。 - 改善策: 無効な特定のフィールドのエラー メッセージを確認し、リクエストが API 仕様に準拠していることを確認します。
FAILED_PRECONDITION(HTTP 400)
システムがオペレーションの実行に必要な状態ではないため、オペレーションが拒否されました。
- 原因: 一般的な原因としては、
COMPLETEまたはCANCELEDの乗車を別の状態に変更しようとしたり、CLOSEDタスクを車両に割り当てようとしたりすることがあります。 - 修復: エンティティの現在の状態が、試行しているオペレーションを許可していることを確認します。特定の状態違反については、エラー メッセージを確認してください。
UNAVAILABLE(HTTP 503)
サービスを利用できません。
- 原因: Fleet Engine サービスの一時的な問題を示しています。
- 修復: 指数バックオフを使用してリクエストを安全に再試行できます。