Questa pagina mostra come eseguire l'override della configurazione del timeout predefinito e configurare una norma di ripetizione utilizzando le librerie client Spanner.
Le librerie client utilizzano le impostazioni predefinite per il timeout e i criteri di ripetizione 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é un numero eccessivo di tentativi potrebbe 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 andrà a buon fine e verrà visualizzato un
errore DEADLINE_EXCEEDED
.
Se l'operazione non va a buon fine e viene restituito 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 di ripetizione continua ad aumentare finché l'operazione non viene completata o non raggiunge il ritardo massimo di ripetizione di 16 secondi. L'operazione non riesce
e viene visualizzato un errore DEADLINE_EXCEEDED
se il tempo totale dedicato al tentativo di esecuzione
dell'operazione supera il valore di timeout totale di 60 secondi.