Questa pagina mostra come ignorare la configurazione del timeout predefinito e configurare un criterio di ripetizione utilizzando le librerie client Spanner.
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
questi valori predefiniti. 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, poiché troppi 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 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 a quando non viene raggiunto il valore massimo.
- Un insieme di codici di errore per le operazioni di ripetizione.
Nell'esempio seguente, per l'operazione specificata è impostato un timeout di 60 secondi.
Se l'operazione richiede più tempo di questo intervallo di tempo, non va a buon fine con un
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 client aspetta 500 ms prima di avviare il primo tentativo di ripetizione. 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 riesce o non viene raggiunto il ritardo massimo del nuovo tentativo di 16 secondi. L'operazione non va a buon fine
con un errore DEADLINE_EXCEEDED
se il tempo totale impiegato per provare l'operazione supera il valore di timeout totale di 60 secondi.