Questa pagina mostra come eseguire l'override della configurazione del timeout predefinito e configurare un criterio per i nuovi tentativi utilizzando le librerie client di Spanner.
Le librerie client utilizzano le impostazioni predefinite dei criteri di timeout e dei nuovi tentativi, definite nei file di configurazione riportati di seguito.
- 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 un breve
tempo, ad esempio 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 personalizzato o di riprovare nella tua applicazione.
Se decidi di modificare il timeout, impostalo sul tempo effettivo in cui l'applicazione è configurata per attendere il risultato.
Non configurare un criterio più aggressivo rispetto a quello predefinito, perché un numero eccessivo di nuovi tentativi potrebbe sovraccaricare il backend e limitare le richieste.
In ogni snippet viene 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.
- Una serie di codici di errore per nuove operazioni.
Nel seguente esempio, viene impostato un timeout di 60 secondi per l'operazione specificata.
Se l'operazione richiede più tempo di questo timeout, l'operazione non va a buon fine e viene restituito un errore DEADLINE_EXCEEDED
.
Se l'operazione non riesce e viene visualizzato un codice di errore UNAVAILABLE
, ad esempio, se c'è un problema di rete temporaneo, l'operazione verrà tentata di nuovo. Il client attende 500 ms prima di avviare il primo tentativo. Se il primo tentativo non va a buon fine, il client attende 1,5 * 500 ms = 750 ms prima di avviare il secondo nuovo tentativo. Il ritardo tra i nuovi tentativi continua ad aumentare finché l'operazione non riesce o raggiunge il ritardo massimo di nuovi tentativi di 16 secondi. L'operazione non va a buon fine e restituisce un errore DEADLINE_EXCEEDED
se il tempo totale impiegato per provare l'operazione supera il valore di timeout totale di 60 secondi.