Questa pagina mostra come eseguire l'override della configurazione del timeout predefinito e configurare una norma di ripetizione dei tentativi utilizzando le librerie client di Spanner.
Le librerie client utilizzano impostazioni predefinite per il timeout e i tentativi 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 un breve periodo di 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
questi valori predefiniti. Tuttavia, se necessario, puoi impostare un timeout personalizzato o un criterio di ripetizione
nell'applicazione.
Se decidi di modificare il timeout, impostalo sull'intervallo di tempo effettivo per cui l'applicazione è configurata per attendere il risultato.
Non configurare un criterio per i nuovi tentativi più aggressivo di quello predefinito, perché troppi tentativi potrebbero sovraccaricare il backend e limitare le richieste.
In ogni snippet è definita una policy di ripetizione con le seguenti caratteristiche:
- La durata iniziale, o di partenza, del tempo di attesa prima di riprovare a inviare la richiesta.
- Un ritardo massimo.
- Un moltiplicatore da utilizzare con il tempo di attesa precedente per calcolare il tempo di attesa successivo, fino al raggiungimento del valore massimo.
- Un insieme di codici di errore per le operazioni di riprova.
Nel seguente esempio, viene impostato un timeout di 60 secondi per l'operazione specificata.
Se l'operazione richiede più tempo di questo timeout, non va a buon fine e viene restituito un
errore DEADLINE_EXCEEDED.
Se l'operazione non va a buon fine e restituisce un codice di errore UNAVAILABLE, ad esempio se si verifica un problema di rete temporaneo, l'operazione viene ritentata. Il client
attende 500 ms prima di iniziare il primo tentativo di ripetizione. Se il primo tentativo
non va a buon fine, il client attende 1,5 * 500 ms = 750 ms prima di iniziare il secondo
tentativo. Questo ritardo tra i tentativi continua ad aumentare finché l'operazione non viene completata o non raggiunge il ritardo massimo tra i tentativi di 16 secondi. L'operazione non va a buon fine
con un errore DEADLINE_EXCEEDED se il tempo totale dedicato al tentativo di esecuzione
dell'operazione supera il valore di timeout totale di 60 secondi.