Solução de problemas comuns

Consulte as seções a seguir para receber ajuda se tiver 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 para o Fleet Engine 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 são feitas 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

Verifique 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 de motorista

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 dela.

Erros de prazo excedido

Se você receber um erro DEADLINE_EXCEEDED ao chamar o Fleet Engine, a solicitação demorou 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 deles e como resolvê-los.

NOT_FOUND (HTTP 404)

Não foi possível encontrar a entidade solicitada (como um veículo, uma viagem ou uma tarefa).

  • 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 com sucesso 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 CreateVehicle ou CreateTrip) 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 as funções necessárias do IAM. Por exemplo, "O JWT não contém um escopo correspondente para a viagem solicitada".
  • Correção: verifique as permissões da sua 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), não preencher 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 verifique se a solicitação está de acordo com a especificação da API.

FAILED_PRECONDITION (HTTP 400)

A operação foi rejeitada porque o estado do sistema não é o necessário para a execução dela.

  • Causa: as causas comuns incluem tentar mudar uma viagem de COMPLETE ou CANCELED para um estado diferente ou tentar atribuir uma tarefa de CLOSED a um veículo.
  • Correção: verifique se o estado atual da entidade permite a operação que você está tentando realizar. 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 usando espera exponencial.