Nesta página, mostramos como substituir a configuração de tempo limite padrão e definir uma política de nova tentativa usando as bibliotecas de cliente do Spanner.
As bibliotecas de cliente usam as configurações de política de tempo limite e repetição padrão, definidas nos arquivos de configuração a seguir.
- spanner_grpc_service_config.json
- spanner_admin_instance_grpc_service_config.json
- spanner_admin_database_grpc_service_config.json
Nos arquivos de configuração, o tempo limite padrão para operações que levam um tempo curto, como CreateSession
, é de 30 segundos. Operações mais longas, como
consultas ou leituras, têm um tempo limite padrão de 3.600 segundos. Recomendamos o uso desses padrões. No entanto, é possível definir uma política personalizada de tempo limite ou nova tentativa
no aplicativo, se necessário.
Se você decidir alterar o tempo limite, defina-o como o tempo real que o aplicativo está configurado para aguardar o resultado.
Não configure uma política de repetição que seja mais agressiva do que o padrão, porque muitas tentativas podem sobrecarregar o back-end e limitar suas solicitações.
Uma política de repetição é definida em cada snippet com estas características:
- O tempo de espera inicial antes de repetir a solicitação.
- Um atraso máximo.
- Um multiplicador a ser usado com o tempo de espera anterior para calcular o próximo tempo de espera até que o máximo seja atingido.
- Um conjunto de códigos de erro para operações de repetição.
Na amostra a seguir, o tempo limite de 60 segundos é definido para a operação determinada.
Se a operação demorar mais do que esse tempo limite, ela falhará com um
erro DEADLINE_EXCEEDED
.
Se a operação falhar com um código de erro UNAVAILABLE
, por exemplo, se houver
um problema temporário de rede, a operação será repetida. O cliente
aguarda 500 ms antes de iniciar a primeira tentativa. Se a primeira nova tentativa
falhar, o cliente aguardará 1,5 * 500 ms = 750 ms antes de iniciar a segunda
nova tentativa. Esse atraso de nova tentativa continua aumentando até que a operação
seja bem-sucedida ou atinja o atraso máximo de repetição de 16 segundos. A operação falhará
com um erro DEADLINE_EXCEEDED
se o tempo total gasto na tentativa da
operação exceder o valor do tempo limite total de 60 segundos.