Confira as seções a seguir para receber ajuda em caso de problemas.
Estado perdido no Fleet Engine
Ao trabalhar com o Fleet Engine, crie sua implementação para antecipar falhas. Por exemplo, se você emitir uma solicitação ao Fleet Engine para atualizar um veículo, ele poderá responder com um erro indicando que o veículo não existe. Sua implementação precisa recriar o veículo no novo estado.
No cenário extremamente improvável de uma falha catastrófica do Fleet Engine, talvez seja necessário recriar a maioria ou todos os veículos e tarefas. Se a taxa de criação ficar muito alta, algumas solicitações poderão falhar novamente devido a problemas de cota, já que as verificações de cota estão em vigor para evitar ataques de negação de serviço (DOS). Nesse caso, diminua a taxa de recriação usando uma estratégia de espera para novas tentativas.
Novas tentativas
Confira se o sistema implementa novas tentativas para solicitações ao Fleet Engine, já que elas podem falhar ocasionalmente. As bibliotecas de cliente do Fleet Engine emitem novas tentativas por padrão.
Estado perdido no app para motoristas
Se o app para motoristas falhar, ele precisará recriar o estado atual no SDK Driver. O app precisa tentar recriar tarefas para garantir que elas existam e restaurar os estados atuais. O app também precisa recriar e definir explicitamente a lista de paradas para o SDK Driver.
Observação: essas restaurações precisam ser feitas de forma autônoma, sem depender de informações do Fleet Engine, exceto erros que indicam se e quando uma entidade já existe no banco de dados. Se uma entidade já existir, esse erro poderá ser absorvido e a entidade poderá ser atualizada usando o ID.
Erros de prazo excedido
Se você receber um erro DEADLINE_EXCEEDED ao chamar o Fleet Engine, a solicitação terá demorado mais do que o tempo limite configurado. As bibliotecas de cliente do Fleet Engine têm tempos limite padrão, mas talvez seja necessário ajustá-los.
Para informações gerais sobre prazos do gRPC, consulte gRPC e prazos.
Para configurar o prazo ao usar a biblioteca de cliente Java do Fleet Engine, ajuste as configurações de nova tentativa de RPC. O exemplo a seguir mostra como configurar um tempo limite personalizado ao configurar o 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());
Erros comuns da API
Esta seção lista erros comuns da API que você pode encontrar, as causas e como resolvê-los.
NOT_FOUND (HTTP 404)
A entidade solicitada (como um veículo, uma viagem ou uma tarefa) não foi encontrada.
- Causa: geralmente causada por uma tentativa de receber, atualizar ou excluir uma entidade usando um ID que não existe no banco de dados.
- Correção: verifique se o ID da entidade está correto e se ela foi criada antes de tentar acessá-la.
ALREADY_EXISTS (HTTP 409)
A entidade que você está tentando criar já existe.
- Causa: causada pela chamada de um método de criação (como
CreateVehicleouCreateTrip) com um ID que já está em uso. - Correção: atualize a entidade atual ou use um novo ID exclusivo para a solicitação de criação.
PERMISSION_DENIED (HTTP 403)
Você não tem as permissões necessárias para concluir a solicitação.
- Causa: isso geralmente ocorre se o JSON Web Token (JWT) não tiver as declarações corretas ou se a conta de serviço que assina o JWT não tiver os papéis do IAM necessários. Por exemplo, "O JWT não contém um escopo correspondente para a viagem solicitada".
- Correção: verifique as permissões da conta de serviço e confira se as declarações do JWT incluem os escopos corretos para a entidade que você está tentando acessar.
INVALID_ARGUMENT (HTTP 400)
Um ou mais argumentos transmitidos na solicitação são inválidos.
- Causa: isso pode acontecer por vários motivos, como fornecer um
valor fora do intervalo (por exemplo, capacidade máxima), perder um campo obrigatório (por exemplo, um
VehicleType) ou fornecer coordenadas inválidas para um ponto de coleta. - Correção: analise a mensagem de erro do campo específico que é inválido e confira se a solicitação está em conformidade com a especificação da API.
FAILED_PRECONDITION (HTTP 400)
A operação foi rejeitada porque o sistema não está em um estado necessário para a execução da operação.
- Causa: as causas comuns incluem tentar mudar uma viagem
COMPLETEouCANCELEDpara um estado diferente ou tentar atribuir uma tarefaCLOSEDa um veículo. - Correção: confira se o estado atual da entidade permite a operação que você está tentando. Verifique a mensagem de erro para violações de estado específicas.
UNAVAILABLE (HTTP 503)
O serviço está indisponível.
- Causa: isso indica um problema temporário com o serviço do Fleet Engine.
- Correção: a solicitação pode ser repetida com segurança com espera exponencial.