Rozwiązywanie typowych problemów

Jeśli napotkasz problemy, zapoznaj się z tymi sekcjami.

Utrata stanu w Fleet Engine

Podczas pracy z Fleet Engine zaprojektuj wdrożenie tak, aby przewidywać awarie. Jeśli na przykład wyślesz do Fleet Engine prośbę o zaktualizowanie pojazdu, może ona odpowiedzieć błędem wskazującym, że pojazd nie istnieje. Wdrożenie powinno wtedy odtworzyć pojazd w nowym stanie.

W bardzo mało prawdopodobnym scenariuszu katastrofalnej awarii Fleet Engine może być konieczne odtworzenie większości lub wszystkich pojazdów i zadań. Jeśli tempo tworzenia stanie się zbyt wysokie, niektóre żądania mogą ponownie zakończyć się niepowodzeniem z powodu problemów z limitem, ponieważ limity są sprawdzane, aby uniknąć ataków typu DoS. W takim przypadku zmniejsz tempo odtwarzania, stosując strategię wycofywania się w przypadku ponownych prób.

Liczba ponownych prób

Upewnij się, że Twój system implementuje ponowne próby wysyłania żądań do Fleet Engine, ponieważ mogą one czasami się nie powieść. Biblioteki klienta Fleet Engine domyślnie podejmują ponowne próby.

Utrata stanu w aplikacji kierowcy

Jeśli aplikacja kierowcy ulegnie awarii, musi odtworzyć bieżący stan w pakiecie Driver SDK. Aplikacja powinna próbować odtworzyć zadania, aby upewnić się, że istnieją, i przywrócić ich bieżące stany. Aplikacja powinna też odtworzyć i wyraźnie ustawić listę przystanków w pakiecie Driver SDK.

Uwaga: te przywrócenia muszą być wykonywane autonomicznie, bez polegania na informacjach z Fleet Engine, z wyjątkiem błędów wskazujących, czy i kiedy encja już istnieje w bazie danych. Jeśli encja już istnieje, można zignorować ten błąd i zaktualizować encję za pomocą jej identyfikatora.

Błędy przekroczenia terminu

Jeśli podczas wywoływania Fleet Engine otrzymasz błąd DEADLINE_EXCEEDED, oznacza to, że żądanie trwało dłużej niż skonfigurowany limit czasu. Biblioteki klienta Fleet Engine mają domyślne limity czasu, ale może być konieczne ich dostosowanie.

Ogólne informacje o terminach gRPC znajdziesz w artykule gRPC i terminy.

Aby skonfigurować termin podczas korzystania z biblioteki klienta Fleet Engine Java, możesz dostosować ustawienia ponawiania RPC. Poniższy przykład pokazuje, jak skonfigurować niestandardowy limit czasu podczas konfigurowania 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());

Typowe błędy interfejsu API

W tej sekcji znajdziesz listę typowych błędów interfejsu API, które mogą wystąpić, ich przyczyny i sposoby ich rozwiązywania.

NOT_FOUND (HTTP 404)

Nie udało się znaleźć żądanej encji (np. pojazdu, przejazdu lub zadania).

  • Przyczyna: zwykle spowodowana próbą pobrania, zaktualizowania lub usunięcia encji za pomocą identyfikatora, który nie istnieje w bazie danych.
  • Rozwiązanie: sprawdź, czy identyfikator encji jest prawidłowy i czy encja została utworzona przed próbą uzyskania do niej dostępu.

ALREADY_EXISTS (HTTP 409)

Encja, którą próbujesz utworzyć, już istnieje.

  • Przyczyna: wywołanie metody tworzenia (np. CreateVehicle lub CreateTrip) z identyfikatorem, który jest już używany.
  • Rozwiązanie: zaktualizuj istniejącą encję lub użyj nowego unikalnego identyfikatora w żądaniu utworzenia.

PERMISSION_DENIED (HTTP 403)

Nie masz wymaganych uprawnień do wykonania żądania.

  • Przyczyna: zwykle występuje, gdy w tokenie internetowym JSON (JWT) brakuje prawidłowych deklaracji lub gdy konto usługi podpisujące JWT nie ma wymaganych ról IAM. Na przykład „JWT does not contain a matching scope for requested trip” (JWT nie zawiera pasującego zakresu dla żądanego przejazdu).
  • Rozwiązanie: sprawdź uprawnienia konta usługi i upewnij się, że deklaracje JWT zawierają prawidłowe zakresy dla encji, do której próbujesz uzyskać dostęp.

INVALID_ARGUMENT (HTTP 400)

Co najmniej 1 argument przekazany w żądaniu jest nieprawidłowy.

  • Przyczyna: może się to zdarzyć z różnych powodów, np. podania wartości spoza zakresu (np. maksymalnej pojemności), braku wymaganego pola (np. VehicleType) lub podania nieprawidłowych współrzędnych punktu odbioru.
  • Rozwiązanie: sprawdź komunikat o błędzie, aby znaleźć konkretne pole, które jest nieprawidłowe, i upewnij się, że żądanie jest zgodne ze specyfikacją interfejsu API.

FAILED_PRECONDITION (HTTP 400)

Operacja została odrzucona, ponieważ system nie jest w stanie wymaganym do jej wykonania.

  • Przyczyna: typowe przyczyny to próba zmiany stanu przejazdu COMPLETE lub CANCELED na inny stan albo próba przypisania zadania CLOSED do pojazdu.
  • Rozwiązanie: upewnij się, że bieżący stan encji umożliwia wykonanie operacji, którą próbujesz wykonać. Sprawdź komunikat o błędzie, aby znaleźć konkretne naruszenia stanu.

UNAVAILABLE (HTTP 503)

Usługa jest niedostępna.

  • Przyczyna: wskazuje na przejściowy problem z usługą Fleet Engine.
  • Rozwiązanie: żądanie można bezpiecznie ponowić ze wzrastającym czasem do ponowienia.