Questa pagina mostra come eseguire l'override del timeout predefinito e configurare un criterio per i nuovi tentativi usando Spanner librerie client.
Le librerie client utilizzano le impostazioni predefinite dei criteri di timeout e di ripetizione, che sono definite nei seguenti file di configurazione.
- spanner_grpc_service_config.json
- spanner_admin_instance_grpc_service_config.json
- spanner_admin_database_grpc_service_config.json
Nei file di configurazione, il timeout predefinito per le operazioni che richiedono poco tempo, come CreateSession
, è di 30 secondi. Le operazioni più lunghe, come query o letture, hanno un timeout predefinito di 3600 secondi. Ti consigliamo di utilizzare
queste impostazioni predefinite. Tuttavia, se necessario, puoi impostare un criterio di timeout o di ripetizione personalizzato nella tua applicazione.
Se decidi di modificare il timeout, impostalo sul tempo effettivo per il quale l'applicazione è configurata per attendere il risultato.
Non configurare un criterio di nuovo tentativo più aggressivo rispetto a quello predefinito, perché troppi nuovi tentativi potrebbero sovraccaricare il backend e limitare le richieste.
In ogni snippet è definito un criterio di ripetizione con le seguenti caratteristiche:
- La durata del tempo di attesa iniziale (o iniziale) prima di riprovare la richiesta.
- Un ritardo massimo.
- Un moltiplicatore da utilizzare con il tempo di attesa precedente per calcolare quello successivo fino al raggiungimento del valore massimo.
- Un insieme di codici di errore per le operazioni di ripetizione.
Nel seguente esempio, viene impostato un timeout di 60 secondi per l'operazione specificata.
Se l'operazione richiede più tempo del timeout, l'operazione non va a buon fine e
DEADLINE_EXCEEDED
errore.
Se l'operazione non va a buon fine con un codice di errore UNAVAILABLE
, ad esempio se si verifica un problema di rete temporaneo, viene eseguito un nuovo tentativo. Il cliente
attende 500 ms prima di avviare il primo tentativo. Se il primo tentativo di ripetizione non va a buon fine, il client attende 1,5 * 500 ms = 750 ms prima di avviare il secondo tentativo di ripetizione. Questo ritardo del nuovo tentativo continua ad aumentare finché l'operazione non va a buon fine o non viene raggiunto il ritardo massimo del nuovo tentativo di 16 secondi. L'operazione non riesce
con un errore DEADLINE_EXCEEDED
se il tempo totale impiegato per provare
l'operazione supera il valore di timeout totale di 60 secondi.