Questa pagina mostra come eseguire l'override della configurazione del timeout predefinito e configurare un criterio di nuovo tentativo utilizzando le librerie client Spanner.
Le librerie client utilizzano le impostazioni dei criteri di timeout predefinito e di nuovo tentativo, 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, come CreateSession
, è 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, puoi impostare un timeout personalizzato o un criterio per nuovi tentativi nell'applicazione, se necessario.
Se decidi di modificare il timeout, impostalo sul tempo effettivo in cui l'applicazione è configurata per attendere il risultato.
Non configurare un criterio per i tentativi più aggressivo di quello predefinito, perché troppi nuovi tentativi potrebbero sovraccaricare il backend e limitare le richieste.
In ogni snippet viene definito un criterio per i nuovi tentativi, con le seguenti caratteristiche:
- La durata del tempo di attesa iniziale o 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 al raggiungimento del massimo.
- Un insieme di codici di errore per ritentare le operazioni.
Nell'esempio seguente, è impostato un timeout di 60 secondi per l'operazione specificata.
Se l'operazione richiede più di questo timeout, l'operazione non va a buon fine e viene visualizzato un errore DEADLINE_EXCEEDED
.
Se l'operazione non riesce e restituisce un codice di errore UNAVAILABLE
, ad esempio in caso di
un problema di rete temporaneo, l'operazione viene tentata di nuovo. Il client attende 500 ms prima di avviare il primo tentativo di nuovo. 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 fino a quando l'operazione non ha esito positivo o non raggiunge il ritardo massimo tra i tentativi di 16 secondi. L'operazione non va a buon fine e viene restituito un errore DEADLINE_EXCEEDED
se il tempo totale dedicato a provare l'operazione supera il valore di timeout totale di 60 secondi.